How to define preprocessor macros in build settings, like IPAD_BUILD, and IPHONE_BUILD (and how to use them in my factory methods)?
如何在构建设置中定义预处理器宏,比如IPAD_BUILD和IPHONE_BUILD(以及如何在我的工厂方法中使用它们)?
I'm using these by heart now, would be cool to know what is going behind.
我现在把这些都记在心里了,如果知道后面发生了什么就好了。
2 个解决方案
#1
45
/#if works as usual if:
/#if如:
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 30200
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
return YES;
}
#endif
return NO;
}
/#ifdef means "if defined - some value or macros":
/#ifdef表示“if defined - some value or 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
or:
或者:
#ifdef __OBJC__
#import <Foundation/Foundation.h>
#endif
Use this link for more information http://www.techotopia.com/index.php/Using_Objective-C_Preprocessor_Directives
更多信息请使用此链接http://www.techotopia.com/index.php/using_objective - c_preprocessor_directive
To test whether you running iPad or not you should have smth like this:
要测试你是否运行iPad,你应该有以下smth:
#define USING_IPAD UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad
if (USING_IPAD) {
NSLog(@"running iPad");
}
Here's another useful preprocessor functions:
下面是另一个有用的预处理函数:
#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
#2
10
A macro can be undefined, it can be defined with no value, or it can be defined with some value, possibly a number. Examples:
宏可以是无定义的,可以是无值的,也可以是有值的,可能是一个数字。例子:
#undef MACRO
#define MACRO
#define MACRO ??????
#define MACRO 0
#define MACRO 1
#ifdef MACRO or #if defined (MACRO) checks whether the macro is defined, with or without value.
#ifdef宏或#if defined(宏)检查是否定义了宏,是否有值。
#if MACRO substitutes the macro definition; if the macro is not defined then it substitutes 0. It then evaluates the expression that it find. If we take the five examples above, #if MACRO will be turned into
#如果宏替换了宏定义;如果宏没有定义,那么它将替换0。然后计算它找到的表达式。如果我们以上面的五个例子为例,# If宏将被转换为
#if 0
#if
#if ??????
#if 0
#if 1
Number 2 and 3 give a compile time error. Number 1 and 4 evaluate to false, so the following code is skipped. Number 5 evaluates to true.
2和3给出一个编译时间错误。1和4的值为false,因此跳过以下代码。5的值为true。
#if is more flexible: You could write
#if更灵活:你可以写作
#if MACRO == 2
which will only compile the following code if the macro was defined for example as
如果宏被定义为
#define MACRO 2
#1
45
/#if works as usual if:
/#if如:
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 30200
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
return YES;
}
#endif
return NO;
}
/#ifdef means "if defined - some value or macros":
/#ifdef表示“if defined - some value or 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
or:
或者:
#ifdef __OBJC__
#import <Foundation/Foundation.h>
#endif
Use this link for more information http://www.techotopia.com/index.php/Using_Objective-C_Preprocessor_Directives
更多信息请使用此链接http://www.techotopia.com/index.php/using_objective - c_preprocessor_directive
To test whether you running iPad or not you should have smth like this:
要测试你是否运行iPad,你应该有以下smth:
#define USING_IPAD UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad
if (USING_IPAD) {
NSLog(@"running iPad");
}
Here's another useful preprocessor functions:
下面是另一个有用的预处理函数:
#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
#2
10
A macro can be undefined, it can be defined with no value, or it can be defined with some value, possibly a number. Examples:
宏可以是无定义的,可以是无值的,也可以是有值的,可能是一个数字。例子:
#undef MACRO
#define MACRO
#define MACRO ??????
#define MACRO 0
#define MACRO 1
#ifdef MACRO or #if defined (MACRO) checks whether the macro is defined, with or without value.
#ifdef宏或#if defined(宏)检查是否定义了宏,是否有值。
#if MACRO substitutes the macro definition; if the macro is not defined then it substitutes 0. It then evaluates the expression that it find. If we take the five examples above, #if MACRO will be turned into
#如果宏替换了宏定义;如果宏没有定义,那么它将替换0。然后计算它找到的表达式。如果我们以上面的五个例子为例,# If宏将被转换为
#if 0
#if
#if ??????
#if 0
#if 1
Number 2 and 3 give a compile time error. Number 1 and 4 evaluate to false, so the following code is skipped. Number 5 evaluates to true.
2和3给出一个编译时间错误。1和4的值为false,因此跳过以下代码。5的值为true。
#if is more flexible: You could write
#if更灵活:你可以写作
#if MACRO == 2
which will only compile the following code if the macro was defined for example as
如果宏被定义为
#define MACRO 2