- 基本预编译指令
#include
将指定头文件嵌入源文件中。
#define
宏定义 - 条件预编译指令 (
#ifdef
、#else
、#endif
、#if
)
#define XXX y
情景一:
#ifdef XXX
NSLog(@"程序_1");
#else
NSLog(@"程序_2");
#endif
//这表明如果标识符XXX已被#define命令定义过则对程序_1进行编译;否则对程序_2进行编译。
情景二:
#ifndef XXX
NSLog(@"程序_1");
#else
NSLog(@"程序_2");
#endif
//这表明如果标识符XXX没有被#define命令定义过则对程序_1进行编译;否则对程序_2进行编译。
情景三:
#if 常量
NSLog(@"程序_1");
#else
NSLog(@"程序_2");
#endif
//这里表示,如果常量为真(非0,随便什么数字,只要不是0),就执行程序_1,否则执行程序_2。
情景四:
#ifdef DEBUG
NSLog(@"程序_1");
#else
NSLog(@"程序_2");
#endif
//如果是debug环境执行程序_1,否则执行程序_2。
#if TARGET_IPHONE_SIMULATOR
NSLog(@"程序_1");
#else
NSLog(@"程序_2");
#endif
//如果是模拟器环境执行程序_1,否则执行程序_2。
情景五:
#ifdef TEST
//程序调试运行时绕过此语句
NSLog(@"程序_1");
#else
NSLog(@"程序_2");
#endif
//避开硬件的限制。有时一些具体应用环境的硬件不一样,但限于条件,本地缺乏这种设备,于是绕过硬件,直接写出预期结果
#ifdef和#if defined之间的区别
两者的用法基本上一样,不过后者的应用范围更大,可以支持多个预编译变量的检查:
#if (!defined(_DEBUG) && defined(USE_MYLIB))
..........
#endif
更多相关信息请查看 Xcode 中 TargetConditionals.h 头文件