Pregunta

Se supone que el siguiente fragmento de código toma el valor de PROYECTO (definido en el Makefile) y crear un nombre de archivo de inclusión. Por ejemplo, si PROJECT = classifier, al final debería generar classifier_ir.h para PROJECTINCSTR

Encuentro que este código funciona siempre y cuando no esté tratando de usar un guión bajo en el sufijo. Sin embargo, el uso del guión bajo no es opcional, nuestra base de código los usa en todas partes. Puedo solucionar esto porque hay un número limitado de valores para PROYECTO, pero me gustaría saber cómo hacer que el siguiente fragmento de código realmente funcione, con el subrayado. ¿Se puede escapar?

#define PROJECT classifier

#define QMAKESTR(x) #x
#define MAKESTR(x) QMAKESTR(x)
#define MAKEINC(x) x ## _ir.h
#define PROJECTINC MAKEINC(PROJECT)
#define PROJECTINCSTR MAKESTR(PROJECTINC)

#include PROJECTINCSTR

Editar: el compilador debe intentar incluir classifier_ir.h, no PROJECT_ir.h.

¿Fue útil?

Solución

#define QMAKESTR(x) #x
#define MAKESTR(x) QMAKESTR(x)
#define SMASH(x,y) x##y
#define MAKEINC(x) SMASH(x,_ir.h)
#define PROJECTINC MAKEINC(PROJECT)
#define PROJECTINCSTR MAKESTR(PROJECTINC)

Otros consejos

Esto funciona para mí:

#define QMAKESTR(x) #x
#define MAKESTR(x) QMAKESTR(x)
#define MAKEINC(x) x ## _ir.h
#define PROJECTINC(x) MAKEINC(x)
#define PROJECTINCSTR MAKESTR(PROJECTINC(PROJECT))

#include PROJECTINCSTR

Ese ejemplo de barebone funciona con gcc (v4.1.2) e intenta incluir " PROJECT_ir.h "

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top