最近把Visual Studio 2013 RC升级到了Visual Studio 2013 RTM,顺手查了一下关于软件版本的知识,了解到通常软件的正式版比测试版要小一些。原因在于在测试版期间,程序员添加了很多的测试用来排查软件中的bug,这些测试代码会被编译到软件中,软件通常较大,而这些测试代码对软件本身而言不是必须的,在正式版,程序员会设置编译参数,是编译器不编译测试的代码片段,因此正式版的软件往往比测试版小得多。
那么如何设置编译参数呢,下面有两种方式实现:
第1种方式,将条件编译写入代码之中,比如:
1 #include <stdio.h> 2 #define DEBUG 3 #ifdef DEBUG 4 #define STDOUT_beta printf 5 #define STDOUT_rtm // 6 #else 7 #define STDOUT_beta // 8 #define STDOUT_rtm printf 9 #endif // DEBUG 10 11 12 int main(void) 13 { 14 STDOUT_bate("This is Visual Studio 2013 Beta!\n"); 15 STDOUT_rtm("This is Visual Studio 2013 RTM!\n"); 16 return 0; 17 }
如果将第2行注释,则输出的程序为
不注释则输出的程序为:
这样就能控制编译器是否将测试代码编译到软件中了。
第2种方式,修改编译环境,具体方法如下:
选择项目-右键属性-配置属性-C/C++-预处理器
在预处理器定义的那一行添加你的宏定义。
比如:DEBUD;
点击确定,这样上述代码的第2行#define DEBUG就会由编译器自动添加了,将第2行注释掉,重新编译,运行结果如下:
对比1、2两种实现方式,往往在实际项目中,模块与模块之间的衔接比较复杂,我们不可能再每一个文件前面写入或者删除相应的宏,所以比较流行的做法是使用第2种方式。
visual studio的条件编译就是这样,如果你使用过gcc/g++,你可以更加透彻的看到条件编译的实现机制。