Was ist der Unterschied (falls vorhanden) zwischen den beiden folgenden Präprozessorsteueranweisungen?Unterschied zwischen den Präprozessordirektiven #if und #ifdef
#if
und
#ifdef
Was ist der Unterschied (falls vorhanden) zwischen den beiden folgenden Präprozessorsteueranweisungen?Unterschied zwischen den Präprozessordirektiven #if und #ifdef
#if
und
#ifdef
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).
+1 für explizit darauf hingewiesen, dass das Definieren von etwas auf Null #if, aber nicht #ifdef deaktivieren. – DevSolar
Wenn FOO nicht Null definiert ist, kompiliert der Compiler.Warum? –
@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. –
#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)
oder meine Lieblings-#if 0 statt mehrere Zeilen zu kommentieren. –
'if (0)' erlaubt es, die Zeilen im Debug-Modus zu kompilieren, so dass Sie beim Debugging in den Block springen können ... – pascal
@pascal: das klingt nach Compiler/env-spezifisch. C++ definiert nicht einmal einen Debug-Modus (obwohl NDEBUG im Kontext von assert Bedeutung hat). ;-P –
Sie sind keine Makros noch Steueranweisungen. Ihr Name ist "Präprozessordirektiven". – ybungalobill
Bearbeiteter Titel. Verließ die "Steueranweisungen" im Textkörper für "unscharfe" Suchen. – DevSolar