27

capisco come usare una direttiva del preprocessore come questo:Objective-C direttiva del preprocessore per 'se non'

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

Ma cosa succede se solo io voglio fare qualcosa SE NON SOME_VARIABLE.

Ovviamente ho ancora potuto fare questo:

#if SOME_VARIABLE 

#else 
    // Do something else 
#endif 

. . . lasciando il se vuoto, ma c'è un modo per farlo:

#if not SOME_VARIABLE 
    // Do something 
#endif 

documentazione di Apple here non suggerisce, ma questo mi sembra un bisogno molto di base.

Fondamentalmente io voglio fare il preprocessore equivalente di:

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

risposta

61

si potrebbe provare:

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

Ho rimosso tutti i riferimenti a TARGET_IPHONE_SIMULATOR. Quello era solo un esempio. Voglio solo sapere come dire SE NON in una direttiva preprocessore. – Undistraction

+0

ah ok, va bene. anche le soluzioni dovrebbero funzionare. – CarlJ

+2

Così fa. Grazie. – Undistraction

15

Stai cercando di verificare se qualcosa è definita o no? Se sì, si può provare:

#ifndef SOME_VARIABLE

o

#if !defined(SOME_VARIABLE)

+0

La mia domanda non ha nulla a che fare se è definita o meno. Volevo solo un modo per fare l'equivalente se if (! Some_var) {// do qualcosa}; – Undistraction

4

La documentazione Apple (If - The C Preprocessor) è corretta e questo è il modo in cui C dichiarazioni pre-processore sono stati in quanto la alba del tempo. Come per la stessa documentazione, tutto ciò che puoi fare è creare un'espressione che valuti zero o un valore diverso da zero e usalo.

Le risposte di Meccan sono corrette come TARGET_IPHONE_SIMULATOR è definito come TRUE o FALSE a seconda della piattaforma, quindi l'espressione verrà valutata a zero oa una quantità diversa da zero.

In generale queste macro (#if ecc.) Vengono utilizzate per includere o escludere le cose in base al fatto che un simbolo sia definito o meno. Per quel caso d'uso il pre-processore ha #ifdef e #ifndef che copre ciò che è stato storicamente accettato come i casi più importanti.

Inoltre, dato che l'oggetto di queste istruzioni può essere solo altri simboli predefiniti pre-processore (tramite #define), questa limitazione è ragionevole.

+0

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