Comment afficher la valeur d'un # define au moment de la compilation dans gcc
Jusqu'à présent, j'ai autant que:
#define ADEFINE "23"
#pragma message ("ADEFINE" ADEFINE)
Qui fonctionne, mais que faire 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 gérer n'importe quelle valeur, y compris undefined.
2 réponses
Pour afficher des macros qui ne sont pas des chaînes, stringify la macro :
#define STRINGIFY(s) XSTRINGIFY(s)
#define XSTRINGIFY(s) #s
#define ADEFINE 23
#pragma message ("ADEFINE=" STRINGIFY(ADEFINE))
Si vous voulez boost, vous pouvez utiliser boost stringize pour le faire pour vous:
#include <boost/preprocessor/stringize.hpp>
#define ADEFINE 23
#pragma message ("ADEFINE=" BOOST_PP_STRINGIZE(ADEFINE))
Je ne suis pas sûr si cela fera ce que vous voulez, mais si cela vous intéresse seulement pour déboguer le problème de macro occasionnel (donc ce n'est pas quelque chose dont vous avez besoin affiché dans un message pour chaque Compilation), ce qui suit peut fonctionner pour vous. Utilisez l'option -E -dD
de gcc pour vider les directives #define
avec la sortie de prétraitement. Puis dirigez-le à travers grep
pour voir uniquement les lignes que vous voulez:
// 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;
}
La commande gcc -E -dD -c test.c | grep ADEFINE
affiche:
#define ADEFINE "23"
#undef ADEFINE
#define ADEFINE 42