将#elif与#ifdef一起使用是否合法?

时间:2017-10-31 22:48:39

标签: c++ c-preprocessor preprocessor preprocessor-directive

谷歌对我没有帮助的一个简单问题。在#elif的上下文中使用#ifdef子句在C ++中是否合法?它似乎与c ++ 11模式(MSVC 2015/2017,clang,GCC)中的所有主要编译器一样按预期编译和工作,但我不确定它是否符合标准。

2 个答案:

答案 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没问题。