【问题标题】:Can #if pre-processor directives be nested in C++?#if 预处理器指令可以嵌套在 C++ 中吗?
【发布时间】:2011-10-04 10:30:27
【问题描述】:

我对 c++ 中的预处理器指令有疑问:

例如:

#ifndef QUESTION

//some code here

#ifndef QUESTION

//some code here

#endif

#endif

我们可以这样使用吗,C++编译器能正确匹配ifndefendif吗?

【问题讨论】:

  • 您可以嵌套条件,并且可以从另一个宏中调用一个宏,但不能直接嵌套宏,例如#define AAA #define XXX - 无法正常工作。
  • 由于 a C question 刚刚作为这个副本的副本被关闭,我将指出 C 和 C++ 预处理器的规则是相同的,至少就这个问题而言。

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


【解决方案1】:

是的,我们可以。 #endif 语句与之前没有对应的 #endif#if #ifdef#ifndef 等匹配。

例如

#if  ----------|
#if  -----|    |
#endif ---|    |
#endif --------|

【讨论】:

  • 我们这里有两个#endif,所以第一个#endif会匹配第二个#ifndef?
  • 与前一个不匹配;这意味着我们无法嵌套它们。
【解决方案2】:

在您的代码中,#ifndef QUESTION 部分将被丢弃,除非您使用#undef QUESTION。

祝你好运!

【讨论】:

  • 对不起,误读了代码示例!我以为它始于#ifdef QUESTION
【解决方案3】:

是的,您可以嵌套 #if/#endif 块。一些 C 编码风格会告诉你写

#ifdef CONDITION1
# ifdef CONDITION2
# endif
#endif

使用空格来表示嵌套级别。

【讨论】:

  • +1 表示嵌套位,有时有助于提高清晰度。
  • 为什么要插入空格?为什么不直接缩进#ifdef
  • 我什至不知道# 和预处理器指令之间的空格是允许的。非常感谢您的提示!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-08
  • 2010-09-23
  • 1970-01-01
  • 2021-01-31
相关资源
最近更新 更多