2012-03-14 9 views

Respuesta

22

para mostrar las macros que no son cadenas, stringify the macro:

#define STRINGIFY(s) XSTRINGIFY(s) 
#define XSTRINGIFY(s) #s 

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

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

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

Bueno, no creo que mi cliente vaya a estar muy contento de haber agregado eso como una dependencia, pero eso parece una prueba de existencia. Tal vez debería ir y echar un vistazo a stringize.hpp –

+4

@JohnLawrenceAspden Actualicé la respuesta con cómo hacerlo sin impulso (o cualquier otra biblioteca). – rob05c

6

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

// 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; 
} 

Los espectáculos de comandos gcc -E -dD -c test.c | grep ADEFINE:

#define ADEFINE "23" 
#undef ADEFINE 
#define ADEFINE 42 
Cuestiones relacionadas