Comment afficher la valeur d’un #define au moment de la compilation dans gcc

Jusqu’à présent, j’ai jusqu’à:

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

Ce qui fonctionne, mais que se passe-t-il si ADEFINE n’est pas une chaîne?

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

causes:

avertissement: ‘message #pragma’ mal formé, ignoré

Idéalement, j’aimerais pouvoir traiter n’importe quelle valeur, y compris les valeurs non définies.

Pour afficher des macros qui ne sont pas des chaînes, ssortingngifiez la macro :

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

Si vous avez / voulez un boost , vous pouvez utiliser boost ssortingngize pour le faire à votre place:

 #include  #define ADEFINE 23 #pragma message ("ADEFINE=" BOOST_PP_STRINGIZE(ADEFINE)) 

Je ne sais pas si cela fera ce que vous voulez, mais si cela ne vous intéresse que de déboguer le problème de macro occasionnel (afin que ce ne soit pas quelque chose dont vous avez besoin dans un message pour chaque compilation), ce qui suit pourrait fonctionner pour vous . Utilisez l’option -E -dD gcc pour vider les directives #define avec le résultat du prétraitement. Ensuite, dirigez cela vers grep pour ne voir que les lignes souhaitées:

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

La commande gcc -E -dD -c test.c | grep ADEFINE gcc -E -dD -c test.c | grep ADEFINE montre:

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