- 論壇徽章:
- 0
|
原帖由 ychang0918 于 2008-7-25 21:56 發(fā)表 ![]()
剛剛看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 ...
找到個(gè)翻譯
如果已經(jīng)知道配置選項(xiàng),那么在編譯你的程序時(shí),應(yīng)該使用if(...)而不是條件編譯,因?yàn)樵谇耙环N情況下,編譯器能夠?qū)λ锌赡艿穆窂竭M(jìn)行廣泛的檢查.
比如: 要寫
if(HAS_FOO)
...
else
...
而不是:
#ifdef HAS_FOO
...
#else
...
#endif
對(duì)于這兩種情況,現(xiàn)代的編譯器比如GCC將會(huì)生成完全相同的代碼,并且我們已經(jīng)在幾個(gè)項(xiàng)目中成功地使用了類似的技術(shù).當(dāng)然,前一種方法假定HAS_FOO被定義為0或1.
盡管它并不象銀彈(silver bullet)那樣解決了所有的可移植性問題,并且并不是總是很恰當(dāng),但是遵照這種策裸可以每年節(jié)省GCC開發(fā)者許多小時(shí),甚至許多天.
在處理GCC中的類似函數(shù)的宏比如REVERSIBLE_CC_MODE時(shí),不能簡(jiǎn)單地使用if(>...)語句.這里有一種簡(jiǎn)單的方法. 再引入另外一個(gè)宏HAS_REVERSIBLE_CC_MODE宏即可. 例如:
#ifdef REVERSIBLE_CC_MODE
#define HAS_REVERSIBLE_CC_MODE 1
#else
#define HAS_REVERSIBLE_CC_MODE 0
#endif |
|