我发现写作
#ifdef ...
#elseif defined(...)
#else
#endif
总是导致使用#ifdef或#else条件,而不是#elseif。但是替换#elif会导致它根据所定义的内容按预期工作。 #elseif的存在是否有什么令人费解的目的?如果没有,为什么预处理器没有抱怨?
也许这就是为什么多年(几十年,真的),我一直在使用丑陋的#else / #endif块,因为至少它们是可靠的!
答案 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相同。