2012-05-15 54 views
0

拿這個代碼,例如:Visual C++編譯器是否優化了未定義的宏塊?

#ifdef THIS_IS_NOT_DEFINED 
//lots of code here... 
#endif 

說的「大量代碼」可能一兆字節添加到生成的可執行程序。如果確實沒有定義THIS_IS_NOT_DEFINED,那麼編譯器是否仍然將所有包含的代碼寫入.exe,或者不是?大多數編譯器是否遵循類似的過程?

+0

我不是專家,但如果宏未被調用,則不應編譯爲編譯 – pyCthon

+0

編譯器不可能這樣做。 「這裏有很多代碼」甚至不需要代碼。 –

+0

這是真的嗎?我確信我記得讀到,根據#if {def}刪除的標準代碼,仍然需要在語法上正確。即使在實踐中沒有任何檢查......這可能是錯誤的,因爲我實際上找不到任何說現在我看起來雖然.. – jcoder

回答

4

C預處理器處理#ifdef。如果沒有定義,那麼編譯器本身甚至不會看到代碼,所以它無法進入.exe。

2

C++編譯在很多階段都有效。首先,通過擴展#include s,#define s等來對代碼進行預處理。這在文本級別上起作用,並且相當於實際修改源代碼。

在這種情況下,編譯器會優化預處理器#ifdef塊中的代碼,因爲預處理器運行時會將該代碼拼接到源文件之外。換句話說,實際編譯和代碼生成的編譯器部分根本不會看到那部分代碼。就好像它不存在一樣。

希望這會有所幫助!