Pergunta

O trecho a seguir é suposto ter o valor de PROJECT (definido no Makefile) e criar um incluem nome do arquivo. Por exemplo, se PROJECT = classificador, então ele deve no final gerar classifier_ir.h para PROJECTINCSTR

Eu acho que esse código funciona, desde que eu não estou tentando usar um sublinhado no sufixo. No entanto, o uso do sublinhado não é opcional - nossa base de código usa-los em todos os lugares. Eu posso contornar isso porque há um número limitado de valores para o projeto, mas eu gostaria de saber como fazer o seguinte trecho realmente trabalho, com o sublinhado. ele pode ser escapado?

#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

Edit:. O compilador deve tentar incluir classifier_ir.h, não PROJECT_ir.h

Foi útil?

Solução

#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)

Outras dicas

Isso funciona para mim:

#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

Esse exemplo barebone trabalha com gcc (v4.1.2) e tenta incluir "PROJECT_ir.h"

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top