谷歌对我没有帮助的一个简单问题。在#elif
的上下文中使用#ifdef
子句在C ++中是否合法?它似乎与c ++ 11模式(MSVC 2015/2017,clang,GCC)中的所有主要编译器一样按预期编译和工作,但我不确定它是否符合标准。
答案 0 :(得分:6)
是的,语法允许在#elif
之后匹配#if
,#ifdef
或#ifndef
:
如果截面:
if-group elif-groups opt else-group opt endif -line如果基团:
# if
常量表达式 换行 组 opt
# ifdef
标识符 换行 组 opt
# ifndef
标识符 换行 组 opt
请注意,#ifdef(X)
只有#if defined(X)
,#ifndef(X)
只有#if ! defined(X)
。
答案 1 :(得分:5)
是的,这是允许的。
语法是:
if-group elif-groups opt else-group opt endif-line
if-group
的定义不仅包括#if
,还包括#ifdef
和#ifndef
,因此#ifdef ... #elif ... #endif
没问题。