目录
何为条件编译指令
在编译一个程序的时候,如果要将一条语句(一组语句)选择编译或者放弃时,就使用条件编译指令
常见的条件编译指令
#if 常量表达式
// ……
#endif
学习条件编译指令
#if 后面是一个常量表达式,当常量表达式为真时(非0时)就执行条件编译中的语句,为假时就不执行
使用条件编译指令
代码演示(为真时):
#include<stdio.h>
int main()
{
#if 1
printf("hello world\n");
#endif
return 0;
}
1 为真,所以要执行 #if 内的代码
代码验证(为真时):
代码演示(为假时):
#include<stdio.h>
int main()
{
#if 0
printf("hello world\n");
#endif
return 0;
}
0 为假,就不会执行 #if 内的代码
代码验证(为假时):
在程序预编译阶段,条件编译指令的代码转换
代码演示(为真时):
#if 1
printf("hello world\n");
#endif
#if 后面的常量表达式为真时,在程序预编译阶段就会把 #if 1 和 #endif 删除,只留下要执行的代码,以上代码就会转换为以下代码:
printf("hello world\n");
代码演示(为假时):
#if 0
printf("hello world\n");
#endif
#if 后面的常量表达式为假时,在程序预编译阶段就会把 #if 1 和 #endif 还有它们所包含的代码全部删除,也就是会将 priintf 函数从程序中删除
结论:
if 等判断语句和 #if 条件编译指令要区分开来,if语句条件为假时只是不执行if内的语句,而 #if 为假时是直接删除 #if 中的语句
多分支的条件编译指令
代码演示:
#define M 0
int main()
{
#if (M == 1)
printf("hello\n");
#elif (M == 2)
printf("world\n");
#else
printf("hello world\n");
#endif
return 0;
}
多分支结构分析:
和 if 、else if 语句类似,#if 和 #elif 中的常量表达式都为假,所以只会执行 #else 中的表达式,并且不论是但分支还是多分支,在末尾都要加上 #endif
代码验证:
且在程序预编译阶段,也是会将不执行的代码删除,只保留执行的代码
结论:
条件编译指令多用于跨平台性的代码上