[英]Does the Visual C++ compiler optimize out undefined macro blocks?
以下面的代碼為例:
#ifdef THIS_IS_NOT_DEFINED
//lots of code here...
#endif
假設“大量代碼”可能會將兆字節添加到生成的可執行文件中。 如果確實未定義THIS_IS_NOT_DEFINED,那么編譯器是否仍將所有包含的代碼寫入.exe? 大多數編譯器是否遵循類似的步驟?
C預處理器處理#ifdef。 如果未定義,則編譯器本身甚至看不到代碼,因此它無法進入.exe。
C ++編譯可在多個階段進行。 首先,通過擴展#include
, #include
#define
等等對代碼進行預處理。這在文本級別起作用,等效於實際修改源代碼。
在這種情況下,編譯器將從預處理器#ifdef
塊中優化代碼,因為在預處理器運行時,它將代碼從源文件中拼接出來。 換句話說,實際進行編譯和代碼生成的編譯器部分將根本看不到代碼的那部分。 好像它不存在。
希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.