2022年C语言的条件编译 .pdf
《2022年C语言的条件编译 .pdf》由会员分享,可在线阅读,更多相关《2022年C语言的条件编译 .pdf(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C 语言的条件编译有些程序在调试、兼容性、平台移植等情况下可能想要通过简单地设置一些参数就生成一个不同的软件,这当然可以通过变量设置,把所有可能用到的代码都写进去,在初始化时配置,但在不同的情况下可能只用到一部分代码,就没必要把所有的代码都写进去,就可以用条件编译,通过预编译指令设置编译条件,在不同的需要时编译不同的代码。(一)条件编译方法条件编译是通过预编译指令来实现的,主要方法有:1、#if,#elif,#else,#endif#if条件1 代码段1#elif 条件2 代码段2.#elif 条件n 代码段n#else 代码段n+1#endif 即可以设置不同的条件,在编译时编译不同的代码,
2、预编译指令中的表达式与C 语言本身的表达式基本一至如逻辑运算、算术运算、位运算等均可以在预编译指令中使用。之所以能够实现条件编译是因为预编译指令是在编译之前进行处理的,通过预编译进行宏替换、条件选择代码段,然后生成最后的待编译代码,最后进行编译。#if 的一般含义是如果#if 后面的常量表达式为true,则编译它所控制的代码,如条件1成立时就代码段1,条件 1 不成立再看条件2 是否成立,如果条件2 成立则编译代码段2,否则再依次类推判断其它条件,如果条件1N 都不成力则会编译最后的代码段n+1。2、#ifdef,#else,#endif或#ifndef,#else,#endif 条件编译的另
3、一种方法是用#ifdef与#ifndef命令,它们分别表示“如果有定义”及“如果无定义”。有定义是指在编译此段代码时是否有某个宏通过#define 指令定义的宏,#ifndef指令指找不到通过#define 定义的某宏,该宏可以是在当前文件此条指令的关面定义的,也可以是在其它文件中,但在此指令之前包含到该文件中的。#ifdef的一般形式是:#ifdef macro_name 代码段1#else 代码段2#endif 或#ifdef的一般形式是:名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 6 页 -#ifndef macro_name 代码段2#else 代码段1#endif
4、这两段代码的效果是完全一样的。3、通过宏函数defined(macro_name)参数为宏名(无需加),如果该macro_name定义过则返回真,否则返回假,用该函数则可以写比较复杂的条件编译指令如#if defined(macro1)|(!defined(macro2)&defined(macro3).#else.#endif(二)条件编译技巧与示例(1)#ifdef和#defined()比较首先比较一下这两种方法,第一种方法只能判断一个宏,如果条件比较复杂实现起来比较烦锁,用后者就比较方便。如有两个宏MACRO_1,MACRO_2 只有两个宏都定义过才会编译代码段A,分别实现如下:#ifd
5、ef MACRO_1#ifdef MACRO_2 代码段A#endif#endif 或者#if defined(MACRO_1)&defined(MACRO_2)#endif 同样,要实现更复杂的条件用#ifdef更麻烦,所以推荐使用后者,因为即使当前代码用的是简单的条件编译,以后在维护、升级时可能会增加,用后者可维护性较强。旧的编译器可能没有实现#defined()指令,C99 已经加为标准。要兼容老的编译器,还需用#ifdef指令。2、#if与#ifdef或#ifdefined()比较比如自己写了一个printf函数,想通过一个宏MY_PRINTF_EN实现条件编译,用#if 可实现如下#
6、define MY_PRINTF_EN 1#if MYS_PRINTF_EN=1 int printf(char*fmt,char*args,.).#endif 如果宏 MY_PRINTF_EN定义为 1 则编译这段代码,如果宏定义不为1 或者没有定义该宏,则不编译这段代码。同样也可以通过#ifdef或者#defined()实现,如#define MY_PRINTF_EN 1 名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 6 页 -#if defined(MY_PRINTF_EN)int printf(char*fmt,char*args,.).#endif 在这种情况下两种方
7、法具有异曲同工之妙,但试想如果你为了节约代码写了两个printf函数,在不同情况下使用不同的printf函数,一个是精简版一个是全功能标准版,如:#define MY_PRINTF_SIMPLE#ifdef MY_PRINTF_SIMPLE void printf(*str)/向终端简单地输出一个字符串.#endif#ifdef MY_PRINTF_STANDARD int printf(char*fmt,char*args,.).#endif 同样可以用#if defined()实现#define MY_PRINTF_SIMPLE#if defined(MY_PRINTF_SIMPLE)vo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年C语言的条件编译 2022 语言 条件 编译
限制150内