2010-09-27 8 views

Répondre

112

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).

+8

+1 pour indiquer explicitement que définir quelque chose à zéro désactivera #if, mais pas #ifdef. – DevSolar

+0

Si FOO défini non-zéro que le compilateur compile.Why? –

+1

@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. –

37
#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) 
+12

ou mon favori #if 0 au lieu de commenter plusieurs lignes. –

+0

'if (0)' permet de compiler les lignes en mode Debug, de sorte que vous pouvez sauter dans le bloc lors du débogage ... – pascal

+1

@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 –

Questions connexes