【C系列】之预处理的条件编译#ifdef/#if/#elif/#else/#endif用法详解

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!

你可能感兴趣的:(C,#ifdef,条件编译,预处理,#endif)