Es ist mir bei der Verwendung von Compiler-Direktiven unklar, welche der folgenden zwei Codeschnipsel richtig/bevorzugt sind und warum. Es scheint, dass die meisten Entwickler und Open-Source-Projekte, die ich gesehen habe, die erste verwenden, aber ich habe die zweite auch häufig benutzt gesehen.#ifdef DEBUG versus #if DEBUG
#ifdef DEBUG
[self doSomethingOnlyWhenDebugging];
#endif
VERSUS
#if DEBUG
[self doSomethingOnlyWhenDebugging];
#endif
Welche der oben genannten Code-Schnipsel vorzuziehen ist für die Ausführung von Code nur beim Debuggen und warum? Meine Vermutung ist, dass die erste ausgeführt wird, wenn DEBUG als TRUE oder FALSE definiert ist, wobei die zweite nur ausgeführt wird, wenn DEBUG definiert und auf TRUE gesetzt ist. Ist das korrekt?
'# ifdef' testet einfach, ob das Symbol definiert wurde.'# if' testet den Wert des Symbols. "#define FOO 0" wird also "#ifdef FOO" wahr machen, aber "#if FOO" ist falsch, weil es '#if 0' ist. –
Sie sollten versuchen, die "root" -Definition zu finden und zu bestimmen, ob der Wert ein 1/0-Wert oder ein vorhanden/abwesend sein soll. Sie falsch zu verstehen, kann "unerwartete" Konsequenzen haben. –