C#error 指令和注释

标签 c c-preprocessor

给定:

#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/

相关文章:

c - sem_getvalue()引起的段错误

c - 这是检查可变宏参数列表是否为空的有效方法吗?

c - 在另一个宏声明中使用宏

c++ - 是否有针对各种操作系统(和版本)的预处理器定义列表?

c - 前 6 次迭代后出现段错误

c - 内联不同维度匿名数组的多维指针初始化

c - 初始化结构而不定义结构成员 - C

c++ - 在 C 代码中注册 C++ 回调方法

c - 展开带引号的字符串内的整数宏

c-preprocessor - C/C++ 预处理器 #include 语法。强制使用空格?