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