Domanda

Il seguente frammento dovrebbe assumere il valore di PROJECT (definito nel Makefile) e crea un nome file include. Ad esempio, se PROJECT = classificatore, alla fine dovrebbe generare classifier_ir.h per PROJECTINCSTR

Trovo che questo codice funzioni fintanto che non sto cercando di usare un trattino basso nel suffisso. Tuttavia, l'uso del carattere di sottolineatura non è facoltativo: la nostra base di codice li utilizza ovunque. Posso aggirare questo perché ci sono un numero limitato di valori per PROJECT ma vorrei sapere come far funzionare effettivamente il seguente frammento, con il carattere di sottolineatura. Può essere sfuggito?

#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

Modifica: il compilatore dovrebbe provare a includere classifier_ir.h, non PROJECT_ir.h.

È stato utile?

Soluzione

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

Altri suggerimenti

Questo funziona per me:

#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

L'esempio barebone funziona con gcc (v4.1.2) e cerca di includere " PROJECT_ir.h "

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top