条件编译宏

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"
上一篇下一篇

猜你喜欢

热点阅读