- 论坛徽章:
- 0
|
原帖由 ychang0918 于 2008-7-25 21:56 发表
刚刚看GNU Coding Standards
Richard Stallman,
last updated June 10, 2008
3.5 Conditional Compilation
When supporting configuration options already known when building your program we
prefer ...
找到个翻译
如果已经知道配置选项,那么在编译你的程序时,应该使用if(...)而不是条件编译,因为在前一种情况下,编译器能够对所有可能的路径进行广泛的检查.
比如: 要写
if(HAS_FOO)
...
else
...
而不是:
#ifdef HAS_FOO
...
#else
...
#endif
对于这两种情况,现代的编译器比如GCC将会生成完全相同的代码,并且我们已经在几个项目中成功地使用了类似的技术.当然,前一种方法假定HAS_FOO被定义为0或1.
尽管它并不象银弹(silver bullet)那样解决了所有的可移植性问题,并且并不是总是很恰当,但是遵照这种策裸可以每年节省GCC开发者许多小时,甚至许多天.
在处理GCC中的类似函数的宏比如REVERSIBLE_CC_MODE时,不能简单地使用if(>...)语句.这里有一种简单的方法. 再引入另外一个宏HAS_REVERSIBLE_CC_MODE宏即可. 例如:
#ifdef REVERSIBLE_CC_MODE
#define HAS_REVERSIBLE_CC_MODE 1
#else
#define HAS_REVERSIBLE_CC_MODE 0
#endif |
|