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