正在做的项目随着开发的进行出现了众多的分支版本。
目前我们还是使用传统的编译开关的方法进行版本代码的区分。
最近遇到的问题是,有一段代码在两个分支版本中需要被xx,而在其他所有版本中不需要被编译。
而两个版本分别由两个编译项来表示,也就是说这两个版本可能共享部分代码。
所以留给我的选择是,要么把公用的代码再复制一份,分别以#if…#endif 包围然后进行编译;要么就是用更简单地方法只保留一份代码,同时共享给两个版本使用。
当时就在想,#if是否可以添加一些运算符进行一些多条件的比较呢。
回到家里,用Dev-C++测试了一下,果然成功。
代码如下:
#include <stdio.h> #include <stdlib.h> #define SW1_OPTION1 0 #define SW1_OPTION2 1 #define SW1_OPTION3 2 #define SW2_OFF 0 #define SW2_ON 1 #define COMPILE_SW1 SW1_OPTION2 #define COMPILE_SW2 SW2_ON int main(int argc, char *argv[]) { #if ((COMPILE_SW1 == SW1_OPTION2) && (COMPILE_SW2)) printf("True result\n"); #else printf("False result\n"); #endif system("PAUSE"); return 0; }
第16行的代码进行的就是复合条件的编译开关,当2个条件都为True时,将执行第17行的代码,否则将执行第19行的代码。
经过测试,运行结果没有问题。
当然,各种比较运算符包括>,<,!=等等;各种逻辑运算符包括 ||="" 和="" !="">,!=等等;各种逻辑运算符包括>
类似代码如下:
#if ((COMPILE_SW1 > SW1_OPTION1) && !(COMPILE_SW2)) #if ((COMPILE_SW1 != SW1_OPTION1) || (COMPILE_SW2))
Responses to “复合条件编译开关的使用”
Leave a Reply