ios objective-c macros c-preprocessor conditional-compilation

ios - ¿Cuál es la diferencia entre#if y#ifdef Objective-C macro del preprocesador?



macros c-preprocessor (2)

¿Cómo definir las macros de preprocesador en la configuración de compilación, como IPAD_BUILD e IPHONE_BUILD (y cómo usarlas en mis métodos de fábrica)?

Estoy usando esto de memoria ahora, sería genial saber lo que está pasando.


/ # si funciona como siempre si:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 30200 if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { return YES; } #endif return NO; }

/ # ifdef significa "si está definido: algún valor o macros":

#ifdef RKL_APPEND_TO_ICU_FUNCTIONS #define RKL_ICU_FUNCTION_APPEND(x) _RKL_CONCAT(x, RKL_APPEND_TO_ICU_FUNCTIONS) #else // RKL_APPEND_TO_ICU_FUNCTIONS #define RKL_ICU_FUNCTION_APPEND(x) x #endif // RKL_APPEND_TO_ICU_FUNCTIONS

o:

#ifdef __OBJC__ #import <Foundation/Foundation.h> #endif

Utilice este enlace para obtener más información http://www.techotopia.com/index.php/Using_Objective-C_Preprocessor_Directives

Para probar si estás usando iPad o no, deberías tener algo como esto:

#define USING_IPAD UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad if (USING_IPAD) { NSLog(@"running iPad"); }

Aquí hay otras funciones útiles de preprocesador:

#ifdef DEBUG //here we run application through xcode (either simulator or device). You usually place some test code here (e.g. hardcoded login-passwords) #else //this is a real application downloaded from appStore #endif


Una macro puede estar indefinida, puede definirse sin valor o puede definirse con algún valor, posiblemente un número. Ejemplos:

#undef MACRO #define MACRO #define MACRO ?????? #define MACRO 0 #define MACRO 1

#ifdef MACRO o #if defined (MACRO) comprueba si la macro está definida, con o sin valor.

# si MACRO sustituye la definición de macro; si la macro no está definida, entonces sustituye 0. A continuación, evalúa la expresión que encuentra. Si tomamos los cinco ejemplos anteriores, #if MACRO se convertirá en

#if 0 #if #if ?????? #if 0 #if 1

Los números 2 y 3 dan un error de tiempo de compilación. El número 1 y 4 se evalúan como falso, por lo que se omite el siguiente código. El número 5 se evalúa como verdadero.

#if es más flexible: podrías escribir

#if MACRO == 2

que solo compilará el siguiente código si la macro se definió, por ejemplo, como

#define MACRO 2