【发布时间】:2018-04-13 05:25:16
【问题描述】:
Google 无法帮助我解决的一个简单问题。在 C++ 中在 #ifdef 的上下文中使用 #elif 子句是否合法?它似乎可以在 c++11 模式下(MSVC 2015/2017、clang、GCC)中的所有主要编译器按预期编译和工作,但我不确定它是否符合标准。
【问题讨论】:
-
是的,这是合法的预处理器说话。 if 之后的 else-if。但是,尽量不要过分依赖预处理器的魔法。
-
#elif可以与#ifdef、#ifndef和#if同等使用 -
@RemyLebeau 是的,我们可以将
#ifdef与#elif一起使用。但是,如果我们#define宏的值为0用于#ifdef案例,#ifdef案例将其测试为真。否则,如果我们将#define宏的值0用于#elif案例,则#elif案例将其测试为 false。 -
@jinbeomhong 那是因为
#ifdef测试宏的存在,而不是它的值。而#elif测试宏的值 -
@RemyLebeau 这就是我正在寻找的答案。我知道我可以使用#ifdef #elif,但我想知道#elif 的含义是否会在这种情况下发生变化。
标签: c++ c-preprocessor preprocessor preprocessor-directive