假设:
#error /*
*/ foo
Microsoft C ++输出/*
和GCC输出foo
的错误消息。
哪个是对的?
答案 0 :(得分:7)
海湾合作委员会是正确的。
评论(包括换行符)的替换发生在翻译阶段3,翻译阶段4的预处理(ISO / IEC 9899:1999,§5.1.1.2)。
因此,编译器的预处理部分不再“看到”换行符了。
并且,#error
的定义如下(§6.10.5):
表单
的预处理指令
# error pp-tokens_opt new-line
导致实现生成包含指定的诊断消息 预处理令牌序列。
因此,foo
必须是输出的一部分。
答案 1 :(得分:2)
GCC是正确的,因为它应该被标准中的单个空格/ * ... * /
替换。