C #error指令和注释

时间:2013-06-10 09:04:17

标签: c c-preprocessor

假设:

#error /*
*/ foo

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

哪个是对的?

2 个答案:

答案 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是正确的,因为它应该被标准中的单个空格/ * ... * /替换。