当前位置: 首页 > news >正文

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,所以在进行编译之时,该常量表达式呈现为真,系统会去编译并且执行用来计算以及输出圆面积的代码段,尽管类似的逻辑借助条件语句也能够实现,然而那样做会致使整个的源程序出现无差别编译的情况,所生成的目标代码十分冗长,但是用过条件编译,单单依照判断结果去选择编译相应的代码段了,有效地缩减了最终程序的体积。在所选代码段比较长的时候,作为一种编译方式,其不仅能够将效率予以提升,并且能够让代码结构得到显著地优化,所以于实际编程当中具备重要的应用价值。

https://soft.zol.com.cn/1054/10545410.htmlsoft.zol.com.cntrue中关村在线https://soft.zol.com.cn/1054/10545410.htmlreport2117预处理程序支持条件编译,可根据不同条件编译程序的不同部分,生成相应的目标代码,有助于程序的移植与调试。条件编译共有三种方式,接下来将逐一说明。1、 预处理程序支持条件编译功能,可根据不同条件编译程序的不同部分,生成相应的目标代码文件,有助于程序的移植与...

http://www.jsqmd.com/news/653483/

相关文章:

  • Unity URP 下 UI 特效开发指南 深入探索顶点色、Mask 交互与扭曲特效的实战技巧
  • 程序包javax.validation.constraints不存在
  • 控制系统幅频特性曲线绘制实战指南(2)
  • New API:企业级AI模型路由与智能管控解决方案
  • rCore入门-来自清华的OS前沿教程
  • 手把手教你学Simulink——基于Simulink的开关电容变换器电压均衡控制
  • Redis Cluster 扩容策略分析
  • Beam Search实战解析:从参数调优到生成效果对比
  • 二叉树层序遍历
  • 终极家庭音乐体验优化指南:打造智能跨平台音乐管理方案
  • 树莓派上更换镜像源的方法
  • MacOS•\APPstore/-help•〈file,ssh=-fi〉
  • 为什么降AI后某些段落AI率反而升高:降AI副作用分析
  • 周红伟:Herems到底凭什么抢了OpenClaw的风头?
  • RocketMQ实战:从订单超时到死信队列,我是如何设计零丢失消息系统的
  • MoveIt!与OMPL实战避坑:为什么你的机械臂规划总失败?可能是算法没选对
  • 宜昌考研保研新风向:2026这些学校口碑不错,学历提升/考研/艺术设计培训/考证/提分,考研培训机构哪家好 - 品牌推荐师
  • esp32c3和电容触摸屏的显示
  • 应对2026论文查重:3款主流降AI工具测评+3个人工微调技巧,告别无效盲改!
  • 手把手教你学Simulink——基于Simulink的三端口隔离型DC-DC变换器能量管理
  • Windows 10 上构建企业级SFTP文件服务器【实战指南】
  • 帝国时代4修改器 风灵月影十一项 支持1.0-v10.0.576版本
  • STM32+AD7124+热电偶方案+Pt100冷端补偿解析工程源码:支持8种热电偶类型T、J...
  • 告别手动计算!用Python+Excel自动规划像控点布设方案(附区域网布点脚本)
  • 《IAR for STM8 从安装授权、工程迁移、编译调试到内存分析与 PWM 转速模拟的完整实战记录》
  • 微服务系列(七) 网关注册中心配置中心-微服务基础设施搭起来
  • 双系统或多系统的引导和分区那些事
  • ComfyUI-Manager终极指南:三步搞定AI工作流节点管理难题
  • 如何15分钟完成vJoy虚拟摇杆完整配置:从零到实战的终极指南
  • 3步搞定Windows媒体播放:LAV Filters终极解码方案