BOOST_PP_STRINGIZE
semble une excellente solution pour le C++, mais pas pour l'ordinaire C.
Voici ma solution pour GNU RPC:
/* Some test definition here */
#define DEFINED_BUT_NO_VALUE
#define DEFINED_INT 3
#define DEFINED_STR "ABC"
/* definition to expand macro then apply to pragma message */
#define VALUE_TO_STRING(x) #x
#define VALUE(x) VALUE_TO_STRING(x)
#define VAR_NAME_VALUE(var) #var "=" VALUE(var)
/* Some example here */
#pragma message(VAR_NAME_VALUE(NOT_DEFINED))
#pragma message(VAR_NAME_VALUE(DEFINED_BUT_NO_VALUE))
#pragma message(VAR_NAME_VALUE(DEFINED_INT))
#pragma message(VAR_NAME_VALUE(DEFINED_STR))
Définitions ci-dessus ont pour conséquence:
test.c:10:9: note: #pragma message: NOT_DEFINED=NOT_DEFINED
test.c:11:9: note: #pragma message: DEFINED_BUT_NO_VALUE=
test.c:12:9: note: #pragma message: DEFINED_INT=3
test.c:13:9: note: #pragma message: DEFINED_STR="ABC"
Pour ", défini comme le nombre entier", "défini comme une chaîne de caractères", et "défini mais pas de valeur" des variables , ils fonctionnent très bien. Seulement pour les "non défini" variable, elles affichent exactement le même que l'original nom de la variable. Vous avez utilisé pour, ou peut-être quelqu'un peut fournir une meilleure solution.