2010-08-20 13 views
8

Una pregunta hipotética: ¿es posible tener un programa C++, que incluye directivas de preprocesador, en una sola línea?Directivas de preprocesador múltiple en una línea en C++

Tal línea se vería así:

#define foo #ifdef foo #define bar #endif 

¿Cuáles son la semántica de una línea de este tipo?

Además, ¿hay alguna combinación de directivas que sean imposibles de construir en una línea?

Si esto es específico del compilador, se aceptan tanto las respuestas de VC++ como las de GCC.

Respuesta

11

Una directiva de preprocesamiento debe terminar con un salto de línea, por lo que este es en realidad un solo directiva de preprocesamiento que define una macro-objeto como, llamada foo, que se expande a la siguiente secuencia token:

# ifdef foo # define bar # endif 

Cualquier más tarde el uso del nombre foo en la fuente (hasta que sea #undef ed) se ampliará a esto, pero después de expandir la macro, los tokens resultantes no se evalúan como una directiva de preproceso.

Esto no es específico del compilador; este comportamiento está definido por los estándares C y C++.

6

Las directivas de preprocesador son algo diferentes a las declaraciones de lenguaje, que terminan en ; y usan espacios en blanco para delimitar tokens. En el caso del preprocesador, la directiva termina con una nueva línea, por lo que es imposible hacer lo que intenta con el lenguaje C++ en sí.

Una forma de simular esto es colocar las líneas deseadas en un archivo de encabezado separado y luego #include en el lugar que desee. El encabezado separado aún tiene que tener cada directiva en una línea, pero el punto donde la incluye es solo una línea, haciendo efectivamente lo que usted solicitó.

Otra forma de lograr algo así es tener un archivo pre-C++ que utilice un proceso externo para procesar en un archivo fuente C++ antes de compilar con su compilador C++. Esto es probablemente más problemas de lo que vale.

Cuestiones relacionadas