instalar con compilar como c gcc macros c-preprocessor pragma

con - gcc wikipedia



¿Cómo muestro el valor de#define en tiempo de compilación en gcc? (2)

No estoy seguro de si esto hará lo que usted desea, pero si solo está interesado en solucionar el problema de macros ocasional (por lo que no es algo que deba mostrarse en un mensaje para cada compilación), lo siguiente podría funcionar para usted. . Use la opción -E -dD gcc para volcar las directivas #define junto con la salida de preprocesamiento. Luego canaliza eso a través de grep para ver solo las líneas que deseas:

// test.c #include <stdlib.h> #include <stdio.h> #define ADEFINE "23" #include <string.h> int main(int argc, char *argv[]) { #undef ADEFINE #define ADEFINE 42 return 0; }

El comando gcc -E -dD -c test.c | grep ADEFINE gcc -E -dD -c test.c | grep ADEFINE muestra:

#define ADEFINE "23" #undef ADEFINE #define ADEFINE 42

Hasta ahora he llegado tan lejos como:

#define ADEFINE "23" #pragma message ("ADEFINE" ADEFINE)

Lo que funciona, pero ¿y si ADEFINE no es una cadena?

#define ADEFINE 23 #pragma message ("ADEFINE" ADEFINE)

causas:

advertencia: ''#pragma message'' malformado, ignorado

Idealmente, me gustaría poder lidiar con cualquier valor, incluso sin definir.


Para mostrar las macros que no son cadenas, Stringify la macro :

#define STRINGIFY(s) XSTRINGIFY(s) #define XSTRINGIFY(s) #s #define ADEFINE 23 #pragma message ("ADEFINE=" STRINGIFY(ADEFINE))

Si tiene / quiere un impulso , puede usar boost stringize para hacerlo por usted:

#include <boost/preprocessor/stringize.hpp> #define ADEFINE 23 #pragma message ("ADEFINE=" BOOST_PP_STRINGIZE(ADEFINE))