【C语言】详谈条件编译

前言

在编译一个程序的时候我们如果要将一条语句(一组语句)编译或者放弃是很方便的。因为我们有条件编译指令。
比如说:

调试性的代码,删除可惜,保留又碍事,所以我们可以选择性的编译。

此时,我们可以使用其他指令创建条件编译。也就是说,可以使用这些指令告诉编译器根据编译时的套件执行或忽略某些信息(或代码)块。


1. #ifdef与#endif

什么意思呢?

#ifdef 指令说明,如果预处理器已经定义了后面的标识符(DEBUG),则执行 #ifdef 与 #endif 之间的所有所有C代码。如果预处理器未定义DEBUG,则中间的代码不参与编译。

格式:
#ifdef DEBUG
		//…………
#endif
  • 注意:#endif 用于结束该条件编译指令(搭配#ifdef使用)。
示例:

未定义标识符DEBUG时(注意:并不是必须是DEBUG,可以自己设计标识符)
在这里插入图片描述

无输出结果

定义标识符DEBUG时

在这里插入图片描述

输出结果:0 0 0 0 0 0 0 0 0 0

注意:使用#ifdef定义的标识符DEBUG后面的1可有可无,随便输入数据都可以。

2. #if与#endif

if 指令很想C语言中的 if 语句。#if 后面跟常量表达式,如果表达式为非0,则表达式为真,执行 #if 与 #endif 中间的所有C代码;如果表达式为0,则表达式为假,中间的代码不参与编译。

格式:
#if DEBUG
		//…………
#endif

注意:#if 指令中可以使用C的关系运算符和逻辑运算符

示例:

表达式为假时在这里插入图片描述

无输出结果

表达式为真时

在这里插入图片描述

输出结果:0 0 0 0 0 0 0 0 0 0

注意:使用#if定义的标识符DEBUG后面必须要有表达式。

3. #elif与#else(多分支的条件编译)

#ifdef / #if #else 很像C的if else语句,两者的主要区别是,预处理器不识别用于标记块的花括号 {}

格式:
#if 常量表达式
		//…………
#elif 常量表达式
		//…………
#else
		//…………
#endif

是不是和C语言的多分支循环语句格式相似!#endif 用于结束该条件编译指令

示例:

在这里插入图片描述

4. #if defined

此编译指令与#ifdef意思相似!
定义标识符执行,未定义则不编译,#endif用于结束

格式:
#if defined(DEUBG)
	//…………
#endif
示例:

定义标识符执行,未定义则不输出
在这里插入图片描述

5. #if !defined与ifndef

这两条编译指令与#if defined、#ifdef意思相反,
意思是:如果标识符未定义,则执行#else与#endif指令之前的所有C代码(else与endif先出现那个就执行到哪里),如果定义了,则不参与编译!
这里不做图演示了!


注意:#ifdef、#endif、#elif、#else、#ifndef #if defined等这些指令结构都可以进行嵌套。

以上讲到的所有条件编译指令都需要 #endif 指令用于结束。


以上代码均在vs2022环境下编译

猜你喜欢

转载自blog.csdn.net/qq_72935001/article/details/126548645
今日推荐