#elseif vs #elif(C / C ++预处理器)

时间:2016-03-21 17:04:13

标签: c++ c-preprocessor conditional-compilation

我发现写作

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

总是导致使用#ifdef或#else条件,而不是#elseif。但是替换#elif会导致它根据所定义的内容按预期工作。 #elseif的存在是否有什么令人费解的目的?如果没有,为什么预处理器没有抱怨?

也许这就是为什么多年(几十年,真的),我一直在使用丑陋的#else / #endif块,因为至少它们是可靠的!

2 个答案:

答案 0 :(得分:12)

#elseif未定义。预处理器不会抱怨,因为#ifdef为假,并且未解析该#ifdef块内的指令。为了说明这一点,这段代码是有效的:

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

答案 1 :(得分:-1)

我刚刚在IAR Embedded Workbench for MSP430 v7.11.1中被发现,该报告将icc430 --version报告为“用于MSP430的IAR C / C ++编译器V7.11.1.983 / W32”, #elseif编译没有错误,但评估结果与#elif相同。