Question

Est-il possible d’imprimer sur stderr la valeur d’une variable du préprocesseur dans C ? Par exemple, ce que j’ai en ce moment est:

#define PP_VAR (10)
#if (PP_VAR > 10)
    #warning PP_VAR is greater than 10
#endif

Mais ce que j'aimerais faire, c'est:

#define PP_VAR (10)
#if (PP_VAR > 10)
    #warning PP_VAR=%PP_VAR%
#endif

Quelque chose comme cela est-il possible dans C ?

Était-ce utile?

La solution

Vous pouvez imprimer la valeur d'une variable de préprocesseur sous visual studio. Ce qui suit imprime la valeur de _MSC_VER:

#define STRING2(x) #x
#define STRING(x) STRING2(x)

#pragma message(STRING(_MSC_VER))

Je ne sais pas à quel point c'est standard.

Autres conseils

Ceci fonctionne avec GCC 4.4.3:

#define STRING2(x) #x
#define STRING(x) STRING2(x)
#pragma message "LIBMEMCACHED_VERSION_HEX = " STRING(LIBMEMCACHED_VERSION_HEX)

donne:

src/_pylibmcmodule.c:1843: note: #pragma message: LIBMEMCACHED_VERSION_HEX = 0x01000017

De nombreux compilateurs C prennent en charge #warning (mais cela n'est pas défini par le standard C).

Cependant, au moins GCC ne fait pas de pré-traitement sur les données qui suivent, ce qui signifie qu'il est difficile de voir la valeur d'une variable.

#define PP_VAR 123
#warning "Value of PP_VAR = " PP_VAR
#warning "Value of PP_VAR = " #PP_VAR
#warning "Value of PP_VAR = " ##PP_VAR

GCC produit:

x.c:2:2: warning: #warning "Value of PP_VAR = " PP_VAR
x.c:3:2: warning: #warning "Value of PP_VAR = " #PP_VAR
x.c:4:2: warning: #warning "Value of PP_VAR = " ##PP_VAR

Utilisez l'opérateur de collage de jetons du préprocesseur: ## TOKEN_NAME

Comme indiqué précédemment, les directives du préprocesseur que vous utilisez sont non standard, donc YMMV.

Eh bien, ce que vous faites est en fait non standard. Tout d’abord, le " # warning " ou " # avertir " directive n'est pas standard. Deuxièmement, lors de l’utilisation du préprocesseur, la ligne doit commencer par le symbole dièse, sans espace:

#ifdef BLAH1
#    define BLAH2 // OK, because pound is at the very left.
#endif

#ifdef BLAH3
     #define BLAH4 // Works on many compilers, but is non-standard.
#endif

Etant donné que vous utilisez déjà une extension non standard, vous devez consulter la documentation du préprocesseur / compilateur particulier que vous utilisez pour voir ce qui est dit à propos de "# warning".

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top