给定:
#error /*
*/ foo
Microsoft C++ 输出错误消息 /*
,GCC 输出 foo
。
哪个是正确的?
最佳答案
海湾合作委员会是正确的。
注释(包括换行符)的替换发生在翻译阶段 3,预处理发生在翻译阶段 4(ISO/IEC 9899:1999,§5.1.1.2)。
因此,编译器的预处理部分不再“看到”换行符。
并且,#error
的定义如下 (§6.10.5):
A preprocessing directive of the form
# error pp-tokens_opt new-line
causes the implementation to produce a diagnostic message that includes the specified sequence of preprocessing tokens.
因此,foo
必须是输出的一部分。
关于C#error 指令和注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17020304/