“21天好习惯“第一期-12
条件编译
在C语言中,如果需要对程序中的一些代码段进行选择性的编译,就需要用到条件编译的命令,条件编译的格式有以下几种:
⑴ #if…#else…格式
#if 判断条件
代码段1
#else
代码段2
#endif
或者
#if 判断条件1
代码段1
#elif 判断条件2
代码段2
#else
代码段3
#endif
功能:和if…else…表达式是一样的。适用的场景是存在真假的判断条件,此条件一般情况下是一个表达式。
⑵ #ifdef…#else…或者#ifndef…#else…格式
#ifdef 标识符
代码段1
#else
代码段2
#endif
或者
#ifndef 标识符
代码段1
#else
代码段2
#endif
功能:判断条件主要是查看标识符是否被定义(#define定义)。
在现实的工程项目中会使用大量的条件编译。比如说通过条件编译来使用各个不同的硬件平台;通过条件编译来实现平台和产品线管理;通过条件编译来区分正式版本和调试版本等等。
条件编译的本质是选择性的编译,其意义在于:
⑴ 增加代码的兼容性,一套代码兼容多个硬件平台或者软件平台;
⑵ 区分产品的调试版本和正式发布版本;
⑶ 不同的产品线共用代码,使用条件编译来产生适用不同产品的目标文件;
⑷ 同时也为程序员提供了一种屏蔽代码块的方式 #if 0….#endif。
理论上来说,条件编译是在预编译的时候生效的,但是我们不要就认为编译好了之后,条件编译就是不起作用了。其实对于第一种形式的条件编译在程序运行中也是有效的。即如果在运行中通过某些触发条件来修改条件编译判断条件的运算结果,也是可以完成实际执行代码段的切换。其实这样的做法在很多的产品中运用,即通过某些设置开关来开启和关闭一些功能。