gpt4 book ai didi

c++ - 在文件末尾预处理多行注释及其嵌入的换行符

转载 作者:可可西里 更新时间:2023-11-01 16:39:32 25 4
gpt4 key购买 nike

这是关于 C99/C11(也可能是 C++)预处理器及其标准合规性的问题。

让我们考虑两个源文件:

/* I'm 
* multiline
* comment
*/

/* I'm 
* multiline
* comment
*/
i_am_a_token;

如果我们用 gcc 或 clang 预处理这两个文件(测试了几个版本),就会有差异。在第一种情况下,预处理器不会保留多行注释中的换行符。在第二种情况下,将保留所有换行符。

所有提到的标准都说(在“翻译阶段”的某处):

Each comment is replaced by one space character. New-line characters are retained.

为什么在处理文件末尾的多行注释时存在差异?这种行为是否符合标准?

最佳答案

原因很简单——行号和错误报告。由于编译器用行号报错,因此预处理文件中的行号与原始文件中的行号相对应比较方便。这就是注释所占用的行在其后跟代码时被保留的原因,而不必在文件末尾保留它们。

至于标准。标准

指定语言、预处理宏等,但它们指定如何处理语言。你可以在 C11 的范围定义中看到它:

ISO/IEC 9899:2011 does not specify

  • the mechanism by which C programs are transformed for use by a data-processing system;

这意味着预处理器输出几乎是内部问题,超出了标准的范围。

关于c++ - 在文件末尾预处理多行注释及其嵌入的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21003215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com