【C语言_25】条件编译!

时间:2022-10-19 13:58:57

条件编译命令指定预处理器依据特定的条件来判断保留或删除某段源代码

条件编译区域以 #if、#ifdef 或 #ifndef 等命令作为开头,以 #endif 命令结尾。条件编译区域可以有任意数量的 #elif 命令,但最多一个 #else 命令

1.#endif

  •  #if, #ifdef, #ifndef这些条件命令的结束标志.

2.#if

  • 编译预处理中的条件命令,相当于C语法中的if语句
#if 常量表达式
语句1;
#endif
//需要使用#endif标记指令快结束
#if 常量表达式
语句1;
语句2;
#endif
#include<stdio.h>
#define n 0
int main()
{
#if n==1 //n==1不论真假9,10行代码均执行
printf("11111\n");
printf("22222\n");
#endif
printf("33333\n");//不受影响预处理指令影响
printf("44444\n");//不受影响预处理指令影响
return 0;
}
//程序经过预处理将做这样的改变:
#include<stdio.h>
int main()
{
printf("33333\n");
printf("44444\n");
return 0;
}

运行结果:

【C语言_25】条件编译!

#include<stdio.h>
#define n 0
int main()
{
#if n==0 //n==1不论真假9,10行代码均执行
printf("11111\n");
printf("22222\n");
#endif
printf("33333\n");//不受影响预处理指令影响
printf("44444\n");//不受影响预处理指令影响
return 0;
}

运行结果:

【C语言_25】条件编译!

(1).#if与if的区别

#if在编译前由预处理器处理,预处理器根据指令的用途修改代码,根据分支走向,保留需要走向分支的代码,删除被跳过分支的代码。

if是编译后,程序运行时计算条件表达式结果,根据表达式结果,让程序走向不同的分支。

3.#else

  • 与#if, #ifdef, #ifndef对应, 若这些条件都不满足,则执行#else之后的语句,相当于C语法中的else
#include<stdio.h>
#define n 0

int main()
{
#if n==0
printf("11111\n");
printf("22222\n");
#else
printf("33333\n");
printf("44444\n");
#endif
return 0;
}

运行结果:

【C语言_25】条件编译!

4.#elif

  • 若#if, #ifdef, #ifndef或前面的#elif条件不满足,则执行#elif之后的语句,相当于C语法中的else-if
#include<stdio.h>
#define n 0

int main()
{
#if n==1
printf("11111\n");
printf("22222\n");
#elif n==0
printf("33333\n");
printf("44444\n");
#else
printf("55555\n");
#endif
return 0;
}
//程序经过预处理将做这样的改变:
#include<stdio.h>
int main()
{
printf("33333\n");
printf("44444\n");
return 0;
}

运行结果:

【C语言_25】条件编译!

5.#ifdef

  • 判断某个宏是否被定义,若已定义,执行随后的语句
#include<stdio.h>
#define price 3
int main()
{
#ifdef price
printf("11111");
#endif
#ifdef PI
printf("66666");
#endif
return 0;
}

运行结果:

【C语言_25】条件编译!

6.#ifndef

  • 与#ifdef相反,判断某个宏是否未被定义
#include<stdio.h>
#define price 3
int main()
{
#ifndef price
printf("11111");
#endif
#ifndef PI
printf("66666");
#endif
return 0;
}

运行结果:

【C语言_25】条件编译!


持续更新【C语言】系列!有需要的移步​​秃头程序媛主页​​!