条件编译宏
2017-11-22 本文已影响102人
i诺离
常用指令
#undef 取消定义宏
#if 如果条件为真,则编译下面的代码
#elif 如果前面的#if不为真,则编译下面的代码
#endif 结束一个#if...#elif条件编译块
#ifdef 如果已经定义了某个宏,则编译下面的代码
#ifndef 如果没有定义某个宏,则编译下面的代码
#error 停止编译并显示错误信息
# 将两侧当做字符串拼接
## 将两侧组成一个变量(它不可以是第一个或者最后一个子串。)
实例:
#define paster( n ) printf( "token" #n " = %d", token##n )
应用:
int token9 = 0;
paster(9);
输出:
token9 = 0
可以通过设置Compiler Flags来定义宏,然后就可以在代码中使用这些宏,来进行条件编译的操作。
有三种方式设置:
OTHER_CFLAGS (Other C Flags)
// 在Target>Build Setting>Custom Compiler Flags>Other C Flags
GCC_PREPROCESSOR_DEFINITIONS (Preprocessor Macros)
// 在Target>Build Setting> Preprocessing > Preprocessor Macros
INFOPLIST_PREPROCESSOR_DEFINITIONS (Info.plist Preprocessor Definitions)
// 在Target>Build Setting> Packaging > Info.plist Preprocessor Definitions
注意:在other c flags 设置 需要使用-D的格式
-D[你要设置的宏名称]
// 没有中括号 发现#if 或者 #ifdef 都可以执行
在 Preprocessor Macros 设置定义宏需要转义,例如
// 定义替换为NSString类型
MY_MACRO=@\"Hello!!\"
// 这样定义替换后的类型是:NSNumber
MY_NUMBER=@"123"