El preprocesador de volcado GCC define

Resuelto Anycorn asked hace 14 años • 6 respuestas

¿Hay alguna manera de que gcc/g++ descargue las definiciones de preprocesador predeterminadas desde la línea de comando? Me refiero a cosas como __GNUC__, __STDC__y así sucesivamente.

Anycorn avatar Feb 09 '10 02:02 Anycorn
Aceptado

Sí, use opciones en lugar de -c . Ejemplo (los envía a la salida estándar):-E -dM

 echo | gcc -dM -E -
 echo | clang -dM -E -

Para C++

 echo | g++ -dM -E -x c++ -
 echo | clang++ -dM -E -x c++ -

Del manual del CCG :

En lugar de la salida normal, genere una lista de directivas `#define' para todas las macros definidas durante la ejecución del preprocesador, incluidas las macros predefinidas. Esto le brinda una manera de descubrir qué está predefinido en su versión del preprocesador. Suponiendo que no tienes el archivo foo.h, el comando

touch foo.h; cpp -dM foo.h

mostrará todas las macros predefinidas.

Si utiliza -dM sin la opción -E, -dM se interpreta como sinónimo de -fdump-rtl-mach.

philant avatar Feb 08 '2010 19:02 philant

Normalmente lo hago de esta manera:

$ gcc -dM -E - < /dev/null

Tenga en cuenta que algunas definiciones del preprocesador dependen de las opciones de la línea de comando; puede probarlas agregando las opciones relevantes a la línea de comando anterior. Por ejemplo, para ver qué opciones SSE3/SSE4 están habilitadas de forma predeterminada:

$ gcc -dM -E - < /dev/null | grep SSE[34]
#define __SSE3__ 1
#define __SSSE3__ 1

y luego comparar esto cuando -msse4se especifica:

$ gcc -dM -E -msse4 - < /dev/null | grep SSE[34]
#define __SSE3__ 1
#define __SSE4_1__ 1
#define __SSE4_2__ 1
#define __SSSE3__ 1

De manera similar, puede ver qué opciones difieren entre dos conjuntos diferentes de opciones de línea de comando, por ejemplo, comparar definiciones de preprocesador para niveles de optimización -O0(ninguno) y -O3(completo):

$ gcc -dM -E -O0 - < /dev/null > /tmp/O0.txt
$ gcc -dM -E -O3 - < /dev/null > /tmp/O3.txt
$ sdiff -s /tmp/O0.txt /tmp/O3.txt 
#define __NO_INLINE__ 1        <
                               > #define __OPTIMIZE__ 1
Paul R avatar Feb 08 '2010 19:02 Paul R