2015-10-27 11 views
10

Desidero utilizzare una direttiva #include con un nome file passato come macro definita esternamente.Sostituzione delle macro nella direttiva #include

E.g.

#include #FILE".h" 

dove FILE sarebbe definito come la stringa MyFile (senza virgolette), con conseguente

#include "MyFile.h" 

Lo stringizing operatore # non possono essere utilizzati qui come simbolo FILE non è un argomento di macro. Ho provato altri approcci, senza risultato.

Vedete una soluzione?

+1

gcc fornisce alcune funzionalità * esternamente * include i file http://stackoverflow.com/questions/3387453/include-header-files-using-command-line-option. Questo potrebbe aiutarti. –

+0

Interessante. Sto usando sia gcc che MSVC e la mia direttiva #include potrebbe non essere nella prima posizione. –

+2

Non sarà possibile, poiché la concatenazione letterale stringa adiacente non viene eseguita fino a dopo lo stadio del preprocessore, quindi ad es. '" MyFile "". H "' non sarà un nome di inclusione valido. Non puoi semplicemente definire "FILE" come il nome effettivo dell'intestazione da includere, ad es. '-DFILE = "MYFILE.H"'? –

risposta

12

La concatenazione letterale di stringhe avvengono in due fasi di conversione dopo che #include -direttezione sono state risolte; il tuo approccio non può funzionare. Invece, provare qualcosa sulla falsariga di

#define STRINGIZE_(a) #a 
#define STRINGIZE(a) STRINGIZE_(a) 

#define MYFILE stdio 
#include STRINGIZE(MYFILE.h) 

int main() { 
    printf("asdf"); 
} 

Demo.

+0

Incredibile, funziona perfettamente! –

Problemi correlati