C语言条件编译精讲

预处理程序支持条件编译,可根据不同条件编译程序的不同部分,生成相应的目标代码,有助于程序的移植与调试。条件编译共有三种方式,接下来将逐一说明。

1、 预处理程序支持条件编译功能,可根据不同条件编译程序的不同部分,生成相应的目标代码文件,有助于程序的移植与调试。条件编译共有三种形式,接下来将逐一进行说明。

2、 第一种方式

3、 第一种形式的格式为:ifdef 标识符 程序段1 else 程序段2 endif。其作用是,当指定的标识符已通过 define 命令定义时,编译器将编译程序段1;若该标识符未被定义,则编译程序段2。若程序段2不存在(即为空),则 else 及其后内容可省略,格式简化为:ifdef 标识符 程序段 endif。这种条件编译方式常用于根据是否定义了某宏来决定编译哪部分代码,提高程序的灵活性和可移植性。示例见例9-12。

4、 }

5、 在程序第1行通过宏定义设置了NUM,使其代表字符串OK,也可替换为其他任意字符串,甚至可以为空。由于第14行使用了条件编译指令,编译器会根据NUM是否被定义来选择编译哪个printf语句。因NUM已在前面定义,系统将编译并执行第一个printf语句,最终输出结果为学号与成绩信息。这种结构使得程序在不同定义下可灵活选择输出内容,增强了代码的可配置性与适应性。

6、 取消程序第一行后,才会编译第二个printf语句,意义相同,读者可上机实践验证效果。

7、 第二种方式

8、 第二种形式的格式为:ifndef 标识符 程序段1 else 程序2 endif,与第一种形式相比,将ifdef替换为ifndef。其作用是,当指定标识符未通过define命令定义时,编译程序段1;若已定义,则编译程序段2。该机制与第一种形式恰好相反,主要用于防止重复包含或根据未定义状态执行不同代码分支,常用于头文件保护等场景,提升程序的健壮性与编译效率。

9、 第三种形态

10、 第三种格式为:if 常量表达式 程序段1 else 程序段2 endif。当常量表达式的值为真(非零)时,编译程序段1;若为假,则编译程序段2。通过这种方式,程序可根据不同条件进行相应的编译处理,实现多样化的功能选择,提升代码的灵活性与适应性。

11、 }

12、 本例采用了第三种条件编译方式。在程序第一行通过宏定义将R设为1,因此在编译时该常量表达式为真,系统会编译并执行计算与输出圆面积的代码段。虽然类似的逻辑也可通过条件语句实现,但那样会导致整个源程序被无差别编译,生成的目标代码冗长。而使用条件编译,仅根据判断结果选择编译相应的代码段,有效缩减了最终程序的体积。当所选代码段较长时,这种编译方式不仅能提升效率,还能显著优化代码结构,因此在实际编程中具有重要的应用价值。

预处理程序支持条件编译,可根据不同条件编译程序的不同部分,生成相应的目标代码,有助于程序的移植与调试。条件编译共有三种方式,接下来将逐一说明。1、 预处理程序支持条件编译功能,可根据不同条件编译程序的不同部分,生成相应的目标代码文件,有助于程序的移植与...

相关推荐
Felven1 天前
C. Brr Brrr Patapim
c语言·开发语言
Zwawa1 天前
嵌入式OLED表驱动菜单:用一张表、一个栈和一个窗口重写表驱动菜单
c语言·单片机·嵌入式
沐晓时光2 天前
C语言入门,内存函数知识讲解
c语言·开发语言
Zwawa2 天前
C语言函数指针与宏实战:从回调、表驱动菜单到X-Macro,讲透嵌入式代码解耦
c语言·单片机·嵌入式
David猪大卫2 天前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
HPtiger2 天前
C++ 入门笔记:从 C 到 C++ 的核心过渡(命名空间、输入输出、缺省参数、重载、引用、内联)
c语言·c++·学习
安妮细水长流2 天前
ad7124
c语言·单片机
Zwawa3 天前
用两个按键做一个OLED菜单:先把选择和执行分开
c语言·单片机·嵌入式
心仪久了会沦陷3 天前
C语言数据结构入门——树与二叉树详解:概念、堆实现与链式遍历
c语言·数据结构·算法
Severus_black3 天前
【C++初阶】list使用及相关实现,思路顺滑流畅!
c语言·数据结构·c++·stl·list