7

鉴于:

#error /*
*/ foo

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

哪个是对的?

4

2 回答 2

7

海湾合作委员会是正确的。

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

因此,编译器的预处理部分不再“看到”换行符。

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

形式的预处理指令

# error pp-tokens_opt new-line

导致实现产生一个诊断消息,其中包括指定的预处理令牌序列。

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

于 2013-06-10T09:11:04.133 回答
2

GCC 是正确的,因为它应该被/ * ... * /标准中的单个空格替换。

于 2013-06-10T09:10:18.447 回答