【发布时间】:2014-01-27 00:00:04
【问题描述】:
这是关于 C99/C11(也可能是 C++)预处理器及其标准合规性的问题。
让我们考虑两个源文件:
/* I'm
* multiline
* comment
*/
和
/* I'm
* multiline
* comment
*/
i_am_a_token;
如果我们用 gcc 或 clang 预处理这两个文件(测试了几个版本),就会有区别。在第一种情况下,预处理器不会保留多行注释中的换行符。在第二种情况下,所有换行符都将被保留。
所有提到的标准都说(在“翻译阶段”的某个地方):
每条评论都被一个空格字符替换。保留换行符。
为什么在文件末尾处理多行 cmets 会有所不同?这种行为是否符合标准?
【问题讨论】:
标签: c++ c comments c-preprocessor language-lawyer