Più le direttive del preprocessore su una riga in C++

Una ipotetica domanda: È possibile avere un programma in C++, che comprende le direttive del preprocessore, del tutto su una riga?

Ad una riga simile a questa:

#define foo #ifdef foo #define bar #endif

Che cosa sono la semantica di una linea del genere?

Inoltre, ci sono combinazioni di direttive che sono impossibili da costruire sulla linea?

Se questo è il compilatore specifico quindi sia VC++ e GCC risposte sono benvenuti.

InformationsquelleAutor dukedave | 2010-08-20



2 Replies
  1. 13

    Una direttiva di pre-elaborazione deve essere terminata da un carattere di nuova riga, quindi questo è in realtà un unico pre-elaborazione direttiva che definisce un oggetto di tipo macro, denominato foo, che si espande al seguente sequenza di token:

    # ifdef foo # define bar # endif

    Qualsiasi successivo utilizzo del nome foo in origine (fino a quando non è #undefndr) si espanderà per questo, ma dopo il macro è ampliato, e la conseguente token non vengono valutate come una direttiva di pre-elaborazione.

    Questo non è un compilatore specifico; questo comportamento è definito da C e C++ standard.

  2. 7

    Le direttive del preprocessore sono un po ‘ diverso le dichiarazioni di lingua, che sono terminati con ; e utilizzare gli spazi per delimitare i token. Nel caso del preprocessore, la direttiva è terminata da un carattere di nuova riga, quindi è impossibile fare quello che stai tentando utilizzando il linguaggio C++ stessa.

    Un modo per tipo di simulare questo è quello di mettere le linee in un file di intestazione e quindi #include dove vuoi. L’intestazione deve ancora avere ogni direttiva su una sola riga, ma il punto in cui si include è solo una singola linea, in modo efficace di fare quello che hai chiesto.

    Un altro modo per realizzare qualcosa di simile che è quello di avere un pre-C++ file che si utilizza un processo esterno al processo in un file di origine C++ prima di compilare con il compilatore C++. Questo è probabilmente un po ‘ più problemi di quanto ne vale la pena.

Lascia un commento