2016-03-21 37 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