2016-03-21 65 views
3

我發現,寫#elseif VS #elif指令(C/C++預處理器)

#ifdef ... 
#elseif defined(...) 
#else 
#endif 

總是導致使用任一的#ifdef或#else僞條件,從來沒有#elseif。但是,用#elif替代它會導致它根據所定義的內容按預期工作。 #elseif的存在有什麼複雜目的,如果有的話?如果沒有,爲什麼預處理器不抱怨?

也許這就是爲什麼多年來(幾十年,真的),我一直在使用醜#else /#endif塊,因爲至少他們是可靠的!

+0

如果'#ifdef'後面的東西被定義了,你會看到一個「Invalid preprocessing directive」錯誤。 ([示例](http://ideone.com/FCPtSD)) – molbdnilo

回答

9

#elseif未定義。預處理器不會投訴,因爲您的#ifdef爲false,並且該#ifdef塊內的指令未被分析。爲了說明這個問題,這段代碼是有效的:

#if 0 
#random nonsense 
#else 
// This must be valid 
#endif