#define PATH "yagh/headers/"
#define FILNAME "includefile"
#define CONCAT(a__, b__) CONCAT_DO(a__, b__)
#define CONCAT_DO(a__, b__) a__##b__
#define CONCATTHREE(a__, b__, c__) CONCAT(CONCAT(a__, b__), c__)
#define STRINGIFY(a__) #a__
#include STRINGIFY(CONCATTHREE(PATH ,FILNAME ,.h));
Esta macro funciona bien en VS compilador, pero no se compila el compilador GCC:preprocesador GCC macro: pegar X y X no da un procesamiento previo válida símbolo
Error: error: pasting "/" and "includefile" does not give a valid preprocessing token
y para algunos archivos de inclusión se da el error:
Error: pasting "includefile" and "." does not give a valid preprocessing token
La concatenación con el operador '##' no funciona con cadenas literales como '" foo "' en GCC. ¿Qué estás tratando de hacer exactamente con esta macro? – thkala
¿Alguna vez encontró una respuesta aceptable a este problema? – Michael
Interesante. Esperaría que ambos dieran un error como 'incapaz de encontrar el archivo de inclusión" CONCATTHREE (PATH, FILNAME, .h) '', que es de hecho lo que veo cuando ejecuto su código a través de gcc ... –