【C系列】之预处理的条件编译#ifdef/#if/#elif/#else/#endif用法详解
程序员文章站
2022-06-02 17:07:00
...
DATE: 2019-2-21
前言
在实现不同模块的代码时,并且不同模块存在复用的代码时,可以采用预处理宏定义#ifdef来实现不同的分支处理。
1、参考
https://bbs.csdn.net/topics/210046082
2、预处理及其作用
预处理指令共有三种:
- 宏定义 #define M 2
- 条件编译 #ifdef/#if/#elif/#else/#endif
- 文件包含 #include
预处理就是在进行编译的第一遍词法扫描和语法分析之前所作的工作。说白了,就是对源文件进行编译前,先对预处理部分进行处理,然后对处理后的代码进行编译。这样做的好处是,经过处理后的代码,将会变的很精短。
这里主要讲解预处理中条件编译#ifdef/#if/#elif/#else/#endif使用的几种方式。
3、预处理的条件编译#ifdef/#if/#elif/#else/#endif使用的几种方式
方式一:
#ifdef _XXXX
...程序段1...
#else
...程序段2...
#endif
这表明如果标识符_XXXX已被#define命令定义过则对程序段1进行编译;否则对程序段2进行编译。
注意:这种方式#ifdef后面只能跟一个宏变量。
方式二:
#ifndef _XXXX
...程序段1...
#else
...程序段2...
#endif
与方式一相反。
方式三:
#if 常量
...程序段1...
#else
...程序段2...
#endif
这种方法可以将测试代码加进来。当需要开启测试的时候,只要将常量变1就好了。而不要测试的时候,只要将常量变0。
方式四:
#if defined(Macro1) || defined(Macro2) || defined(Macro3)
...程序段1...
#elif defined(Macro4)
...程序段2...
#endif
方式四这种方法比较灵活,可以使用多个宏变量的组合(或||or与&&),推荐使用这种方法!
方式五:
#if !defined(Macro1) || defined(Macro2) || defined(Macro3)
...程序段1...
#elif !defined(Macro4)
...程序段2...
#endif
THE END!
上一篇: 编译原理 实验一 词法分析之预处理
下一篇: 网站优化为什么要为网站增加优质的内容?