C#error指令和注释

rwa*_*ace 7 c c-preprocessor

鉴于:

#error /*
*/ foo
Run Code Online (Sandbox Code Playgroud)

Microsoft C++输出错误消息/*和GCC输出foo.

哪个是对的?

und*_*gor 7

GCC是正确的.

替换注释(包括换行符)发生在翻译阶段3,翻译阶段4中的预处理(ISO/IEC 9899:1999,§5.1.1.2).

因此,编译器的预处理部分不再"看到"换行符.

并且,#error定义如下(§6.10.5):

表单的预处理指令

# error pp-tokens_opt new-line

使实现生成包含指定序列的预处理标记的诊断消息.

所以,foo必须是输出的一部分.