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

C语言条件编译详解:3种方式助你高效移植调试

进行预处理时的程序,它支持条件编译行为,能够依据不一样的条件,针对程序里不同的部分实施编译操作,进而生成与之相对应的目标代码,这对程序的移植以及调试是有帮助作用的。条件编译总共存在三种方式,接下来会逐个给予说明。

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、 除掉程序的第一行之后,才能够编译第二个输出语句,意思是一样的,读者要是去上机实践一下从而验证效果。

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


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

相关文章:

  • EasyBuzzer:嵌入式蜂鸣器非阻塞驱动库设计与实践
  • FastECompass:嵌入式轻量级倾角补偿电子罗盘算法库
  • javaweb--04
  • Radioenge LoRaWAN模块AT指令库技术解析与嵌入式集成
  • 软考高级-系统分析师-案例分析:从单体到微服务的架构演进实战
  • 弹幕格式转换难题?用DanmakuFactory一键解决XML到ASS的专业转换
  • 新手别怕!用嘉立创EDA两层板搞定ESP8266最小系统PCB(附完整工程文件)
  • Eigen嵌入式线性代数库:轻量级矩阵计算与实时系统实践
  • 020、生产环境考量:异步支持、超时、重试与错误处理
  • 【LeetCode Hot 100】滑动窗口最大值——多种解法深度解析
  • 【服务出错问题排查记录】从一个“点击失败”开始:为什么“系统异常”其实是最差的错误设计
  • CodeMagicianT源
  • VSCode跑Python代码总报缺包?一个设置解决Conda环境识别问题
  • 性能核弹X4522首发“翻车”不断?赋缘汇全套调教方案出炉:五大旗舰平台稳如泰山,EFVI一键脚本封神!
  • Noir:一款键盘驱动的现代化数据库管理工具
  • 选型建议:基于职场新人的能力模型,深度分析一级与二级认证的匹配度
  • 021、LangChain Expression Language(LCEL):声明式构建复杂链
  • Consentium Starter Kit嵌入式传感器开发套件全栈解析
  • ERTEC 系列 PROFINET 芯片级硬件过滤器分析桌
  • 抖音下载器终极指南:如何高效批量下载无水印内容
  • Turbo Boost Switcher:掌控Mac性能波动的终极解决方案
  • 人工智能编程流程技能AI Dev Workflow
  • 告别脏数据!用Power Query这3招让你的Power BI报表加载速度翻倍
  • 手机端访问 Web 服务器
  • SE_BME680库:BME680温湿度补偿与IAQ鲁棒算法详解
  • Aria2 Pro Docker部署避坑指南:从RPC密钥到端口映射,一次讲清楚
  • ICMP协议
  • 【为什么你的node包 python包 总是在c盘】彻底解决c盘因为包太多而爆炸的问题
  • 备考策略:针对职场人的时间与精力,提供AI认证考试的高效备考与避坑方案
  • 从ViT到Swin:手把手教你理解那个让Transformer在CV领域“开窍”的Shifted Windows