2016-03-21 5 views
3

私は#elseifは

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

を書くことはいつもの#ifdefまたはの#else条件、決して#elseifのいずれかを使用して、その結果ことを見出しました。しかし、#elifを代入すると、定義した内容に基づいて期待どおりに動作します。どのような複雑な目的があれば、それは#elseifの存在によって提供されますか?そして、もし存在しなければ、プリプロセッサはなぜ不平を言っていませんか?

これは何十年(本当に何十年も)の間、おそらく私は醜い#else /#endifブロックを使ってきました。

+0

'#ifdef'の後のものが定義されている場合は、「無効な前処理ディレクティブ」エラーが表示されます。 ([例](http://ideone.com/FCPtSD)) – molbdnilo

答えて

9

#elseifは定義されていません。プリプロセッサは、#ifdefが偽であり、その#ifdefブロック内のディレクティブが解析されていないため、文句を言わない。これを説明するために、このコードは有効です:

#if 0 
#random nonsense 
#else 
// This must be valid 
#endif 
関連する問題