2010-09-27 10 views

Antwort

112

können Sie den Unterschied demonstrieren, indem Sie:

#define FOO 0 
#if FOO 
    // won't compile this 
#endif 
#ifdef FOO 
    // will compile this 
#endif 

#if Prüfungen für den Wert des Symbols, während #ifdef prüft die Existenz des Symbols (unabhängig von dessen Wert).

+8

+1 für explizit darauf hingewiesen, dass das Definieren von etwas auf Null #if, aber nicht #ifdef deaktivieren. – DevSolar

+0

Wenn FOO nicht Null definiert ist, kompiliert der Compiler.Warum? –

+1

@fahad: '# if' überprüft den * Wert * des Symbols, ob es nicht Null (wahr) oder Null (falsch) ist. Dann wird der Block kompiliert, wenn das Ergebnis wahr ist. –

37
#ifdef FOO 

ist eine Abkürzung für:

#if defined(FOO) 

#if kann auch für andere Tests oder für komplexere Präprozessorbedingungen verwendet werden.

#if defined(FOO) || defined(BAR) 
+12

oder meine Lieblings-#if 0 statt mehrere Zeilen zu kommentieren. –

+0

'if (0)' erlaubt es, die Zeilen im Debug-Modus zu kompilieren, so dass Sie beim Debugging in den Block springen können ... – pascal

+1

@pascal: das klingt nach Compiler/env-spezifisch. C++ definiert nicht einmal einen Debug-Modus (obwohl NDEBUG im Kontext von assert Bedeutung hat). ;-P –

Verwandte Themen