【发布时间】:2016-06-11 20:59:47
【问题描述】:
在 MSDN (https://msdn.microsoft.com/en-us/library/ew2hz0yd.aspx) 我看到以下内容:
所有条件编译指令,例如 #if 和 #ifdef,必须 在文件结束之前与关闭 #endif 指令匹配; 否则,会生成错误消息。条件编译时 指令包含在包含文件中,它们必须满足相同的 条件:必须没有不匹配的条件编译 包含文件末尾的指令。
嗯,简单明了。同时我在 C++11 标准中找不到类似的东西。我的问题是这个法律限制吗?
我完全理解将条件编译拆分到多个#include 层不是一个好主意,应该避免。
有人知道其他编译器(GCC、CLANG)如何处理这种情况吗?也许这在某处讨论过?
【问题讨论】:
-
您显然是在询问 C++ 标准,所以不要添加 C 标签。
-
您是否尝试过执行此操作时会发生什么?
-
嗯,这也与 C 有关。它有不同的标准,可能会有所不同。
-
@Alex: VisualStudio 给
fatal error C1004: -
我可以快速浏览的唯一指示是,在标准中描述预处理指令的语法中最顶层的非终结符被命名为 preprocessing-file [cpp]。所以似乎意图是构造可能不跨越多个文件。
标签: c++ c-preprocessor language-lawyer