iOS预处理宏使用指南

预处理宏使用指南

预处理就是对源文件进行编译前,先对预处理部分进行处理,然后对处理后的代码进行编译。

常用宏说明

#define  定义一个预处理宏
#undef   取消宏的定义
#if      编译预处理中的条件命令, 相当于C语法中的if语句
#ifdef   判断某个宏是否被定义(#define过), 若已定义, 执行随后的语句
#ifndef  与#ifdef相反, 判断某个宏是否未被定义
#elif    若#if, #ifdef, #ifndef或前面的#elif条件不满足, 则执行#elif之后的语句, 相当于C语法中的else-if
#else    与#if, #ifdef, #ifndef对应, 若这些条件不满足, 则执行#else之后的语句, 相当于C语法中的else
#endif   #if, #ifdef, #ifndef这些条件命令的结束标志.
defined   与#if, #elif配合使用, 判断某个宏是否被定义
#pragma  说明编译器信息
#warning 显示编译警告信息
#error   显示编译错误信息

宏的使用步骤

1.如在 "Target > Build Settings > Preprocessor Macros > Debug" 设置"DEBUG=1”。

2.之后在pch或工具类中就可以这么写了:
#ifdef DEBUG  
(debug 模式下的配置)
#else  
(release 模式下的配置)
#endif 

#ifdef使用说明

#ifdef _XXXX   //(ifdef=>if define)
    代码块1
#elif defined _YYYY   //(相当于else if)
    代码块2
#else
    代码块3
#endif

如果_XXXX已被#define或Preprocessor Macros中定义过,则对代码块1进行编译,如果没有定义_XXXX但定义了_YYYY,则编译代码块2,否则只对代码块3进行编译。

注意:#ifdef后面接的是一个宏

#ifndef使用说明

#ifndef _XXXX   //(ifndef=>if not define)
    代码块1
#else
    代码块2
#endif

#ifndef和#ifdef是相反的情况,如果没有定义宏_XXXX,那么就会编译代码块1,否则会编译代码块2

#if使用说明

#if 常量或表达式
    代码块1
#else
    代码块2
#endif

如果常量为真(非0),就编译代码块1,否则编译代码块2

注意:#if后必须是常量,不能是宏,因为宏是运行阶段才有,#if是预编译阶段,会找不到宏

最后强调一点:这几个宏定义只是决定代码块是否被编译,而不是被执行。

常用示例

1.判断真机或模拟器

#if TARGET_OS_IOS
    NSLog(@"真机测试");
#endif

#if TARGET_IPHONE_SIMULATOR
    NSLog(@"模拟器");
#endif

2.获取当前设备的iOS版本

#define kIOSVersion  [[UIDevice currentDevice].systemVersion doubleValue]

你可能感兴趣的:(iOS预处理宏使用指南)