27

entiendo cómo utilizar una directiva de preprocesador como esto:Objective-C para la directiva de preprocesador 'si no'

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

Pero lo que si sólo quiero hacer algo SI NO SOME_VARIABLE.

Obviamente todavía podía hacer esto:

#if SOME_VARIABLE 

#else 
    // Do something else 
#endif 

. . . abandona el si está vacío, pero hay una manera de hacerlo:

#if not SOME_VARIABLE 
    // Do something 
#endif 

documentación de Apple here no sugiere, pero esto parece una necesidad muy básica.

Básicamente quiero hacer el preprocesador equivalente de:

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

Respuesta

61

usted podría intentar:

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

He eliminado todas las referencias a TARGET_IPHONE_SIMULATOR. Eso fue solo un ejemplo. Solo quiero saber cómo decir SI NO en una directiva de preprocesador. – Undistraction

+0

ah bien, eso está bien. las soluciones también deberían funcionar. – CarlJ

+2

Así lo hace. Gracias. – Undistraction

15

¿Estás tratando de comprobar si algo se define o no? Si es así, puede intentar:

#ifndef SOME_VARIABLE

o

#if !defined(SOME_VARIABLE)

+0

Mi pregunta no tiene nada que ver, ya sea que esté definida o no. Solo quería una forma de hacer el equivalente si if (! Some_var) {// do something}; – Undistraction

4

La documentación de Apple (If - The C Preprocessor) es correcta y esta es la forma en que los estados pre-procesador de C han sido desde la inicio de los tiempos. Según esa misma documentación, todo lo que puede hacer es crear una expresión que evalúe cero o un valor distinto de cero y usar eso.

respuestas de la Meca es correcto como TARGET_IPHONE_SIMULATOR se define como TRUE o FALSE dependiendo de la plataforma, por lo que la expresión evaluará a cero o una cantidad distinta de cero.

En general, estas macros (#if, etc.) se utilizan para incluir o excluir elementos en función de si un símbolo está definido o no. Para ese caso de uso, el preprocesador tiene #ifdef y #ifndef que cubre lo que históricamente se ha aceptado como los casos más importantes.

También dado que el tema de estas declaraciones solo puede ser otros símbolos definidos por el preprocesador (a través de #define), esta limitación es razonable.

+0

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

Cuestiones relacionadas