Quelle est la différence (le cas échéant) entre les deux instructions de contrôle du préprocesseur suivantes.Différence entre les directives du préprocesseur #if et #ifdef
#if
et
#ifdef
Quelle est la différence (le cas échéant) entre les deux instructions de contrôle du préprocesseur suivantes.Différence entre les directives du préprocesseur #if et #ifdef
#if
et
#ifdef
Vous pouvez démontrer la différence en faisant:
#define FOO 0
#if FOO
// won't compile this
#endif
#ifdef FOO
// will compile this
#endif
#if
vérifie la valeur du symbole, alors que #ifdef
vérifie l'existence du symbole (quelle que soit sa valeur).
+1 pour indiquer explicitement que définir quelque chose à zéro désactivera #if, mais pas #ifdef. – DevSolar
Si FOO défini non-zéro que le compilateur compile.Why? –
@fahad: '# if 'vérifie la * valeur * du symbole pour voir s'il est différent de zéro (vrai) ou zéro (faux). Alors le bloc est compilé si le résultat est vrai. –
#ifdef FOO
est un raccourci pour:
#if defined(FOO)
#if
peut également être utilisé pour d'autres tests ou pour des conditions de préprocesseur plus complexes.
#if defined(FOO) || defined(BAR)
ou mon favori #if 0 au lieu de commenter plusieurs lignes. –
'if (0)' permet de compiler les lignes en mode Debug, de sorte que vous pouvez sauter dans le bloc lors du débogage ... – pascal
@pascal: cela semble très compilateur/env spécifique. C++ ne définit même pas un mode de débogage (bien que NDEBUG ait un sens dans le contexte de assert). ;-P –
Ce ne sont pas des macros ni des instructions de contrôle. Leur nom est "directives du préprocesseur". – ybungalobill
Titre modifié. A laissé les "instructions de contrôle" dans le corps du texte pour les recherches "floues". – DevSolar