2011-01-12 34 views
6
#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

+1

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

+0

¿Alguna vez encontró una respuesta aceptable a este problema? – Michael

+1

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 ... –

Respuesta

Cuestiones relacionadas