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