OC预处理:2-条件指令编译#if/#elif/#else/#ifdef/#ifndef
条件编译指令将决定哪些代码被编译,而哪些是不被编译的。根据表达式的值或者某个特定的宏是否被定义来确定编译条件。
#if/#elif/#else
- #if 指令检测跟在关键字后的宏或者常量表达式的值,如果值为真,则编译后面的代码,直到出现#else、#elif或#endif为止,反之则不执行;
- #elif 预处理指令综合了 #else 和 #if 指令的作用,类似于else if;
- #else 指令用于某个 #if 指令之后,当前面的 #if 指令的条件不为真时,就编译 #else 后面的代码。
#define IOS10 1
#define IOS9 0
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 如果 IOS10 值为真时,输出It is an iOS10 device!;若 IOS10 值为假且 IOS9 值为真时,输出It is an iOS9 device!;否则输出It is a device NOT runing iOS10 or iOS9!
// #if 和 #endif 配对出现,#endif 用于终止 #if 预处理指令
#if IOS10
NSLog(@"It is an iOS10 device!");
#elif IOS9
NSLog(@"It is an iOS9 device!");
#else
NSLog(@"It is a device NOT runing iOS10 or iOS9!");
#endif
}
return 0;
}
运行结果如下。大家可以自行修改宏定义中IOS10和IOS9的值,看一下运行结果的变化情况。
#ifdef
#ifdef 等价于 #if defined,如果后面跟的宏被定义过,则执行下面的代码。
#define RUN
int main(int argc, const char * argv[]) {
@autoreleasepool {
#ifdef RUN
NSLog(@"defined...");
#endif
}
return 0;
}
运行结果:
#ifndef
#ifndef 和 #ifdef 相反,如果后面跟的宏没有被定义过,则执行下面的代码。
int main(int argc, const char * argv[]) {
@autoreleasepool {
#ifndef RUN
NSLog(@"not defined...");
#endif
}
return 0;
}
运行结果:
示例代码
https://github.com/99ios/6.3.3
文章发布时间为: August 24th , 2016 at 11:00 am
最后编辑时间为: September 14th , 2017 at 09:06 am
本文由 99ios 创作,转载请注明出处
最后编辑时间为: September 14th , 2017 at 09:06 am
本文由 99ios 创作,转载请注明出处