27

Ich verstehe, wie eine Präprozessordirektive wie folgt verwenden:Objective-C Präprozessordirektive für ‚wenn nicht‘

#if SOME_VARIABLE 
    // Do something 
#else 
    // Do something else 
#endif 

Aber was, wenn ich will nur etwas WENN NICHT SOME_VARIABLE tun.

Offensichtlich konnte ich dies noch tun:

#if SOME_VARIABLE 

#else 
    // Do something else 
#endif 

. . . die, wenn leer verlassen, aber ist es eine Möglichkeit zu tun:

#if not SOME_VARIABLE 
    // Do something 
#endif 

Apple-Dokumentation here schlägt nicht, aber dies scheint wie ein sehr grundlegendes Bedürfnis.

Grundsätzlich mag ich den Präprozessor äquivalent tun:

if(!SOME_VARIABLE)(
{ 
    // Do Something 
} 

Antwort

61

Sie könnten versuchen:

#if !(SOME_VARIABLE) 
    // Do something 
#endif 
+0

Ich habe alle Verweise auf TARGET_IPHONE_SIMULATOR entfernt. Das war nur ein Beispiel. Ich möchte nur wissen, wie man IF NOT in einer Präprozessordirektive sagt. – Undistraction

+0

ah okay, das ist in Ordnung. Die Lösungen sollten auch funktionieren. – CarlJ

+2

So ist es. Vielen Dank. – Undistraction

15

Sie zu überprüfen Versuchen, wenn etwas definiert ist oder nicht? Wenn ja, können Sie versuchen:

#ifndef SOME_VARIABLE

oder

#if !defined(SOME_VARIABLE)

+0

Meine Frage hat nichts zu tun, ob es definiert ist oder nicht. Wollte nur eine Möglichkeit, das Äquivalent zu tun, wenn if (! Some_var) {// mach etwas}; – Undistraction

4

Die Apple-Dokumentation (If - The C Preprocessor) ist richtig und das ist die Art und Weise, dass C Pre-Prozessor-Anweisungen, da die gewesen Dämmerung der Zeit. Gemäß der gleichen Dokumentation können Sie nur einen Ausdruck erstellen, der entweder einen Wert ungleich Null oder einen Wert ungleich Null ergibt und diesen Wert verwendet.

Antworten Meccan ist, ist die richtige TARGET_IPHONE_SIMULATOR als TRUEFALSE oder abhängig von der Plattform definiert ist, so dass der Ausdruck wird entweder auf Null oder einen von Null verschiedenen Betrag zu bewerten.

Im Allgemeinen werden diese Makros (#if usw.) zum Einschließen oder Ausschließen von Dingen verwendet, je nachdem, ob ein Symbol definiert ist oder nicht. Für diesen Anwendungsfall hat der Vorprozessor #ifdef und #ifndef, was die historisch wichtigsten Fälle abdeckt.

Auch vorausgesetzt, dass der Gegenstand dieser Aussagen nur andere vorprozessordefinierte Symbole sein können (über #define), dann ist diese Einschränkung angemessen.

+0

https://gcc.gnu.org/onlinedocs/gcc-4.2.4/cpp.pdf –