多行注释和新行
Multi-line comments and new-lines
在c++ 11中,标准在2.2.3中说:
每个注释用一个空格字符替换。保留换行符
-
这个短语是顺序的吗,意思是保留以new-line结束的注释的new-line?
-
如果(1)为真,那么为什么Visual c++, gcc和clang在多注释中每行保持空行
这个问题很重要,因为我正在写一个c++预处理器。
它所讨论的新行是在注释被单个空格字符替换之后仍然存在的行。当将该片段放在包含它的段落的更大的上下文中查看时,这一点就更清楚了。
所以多行注释中的新行是而不是,并且不终止预处理指令。
C/c++预处理器会去掉所有注释,但当您查看预处理器输出时,通常会将源行保持在相同的行号。
这样,读取预处理器输出的编译器就可以为错误消息和警告打印正确的行号。
预处理器通常也保留所有空行。
您还必须严格区分从源文件中删除多行宏和扩展多行宏的情况。它们总是被删除而保留所有换行符。它们总是被替换,所有换行符都去掉。两者都是完全独立的操作,彼此之间没有任何关系。
在过去,C预处理器总是在标准输出(stdout)上生成输出,C编译器从标准输出(stdin)中读取输出。预处理器发出内部#<N> "<FILE>"
语句,C编译器将其解释为"行号N紧随其后"。因此,理论上,预处理器可以在输出中不发出空行。但是在实践中,这个#<N> "<FILE>"
特性只用于#include
语句后面的行。
现在,预处理器被内置到C编译器中以提高性能,但是如果显式请求,您仍然可以查看中间结果。
注意:请参阅下面的注释:标准并没有真正指定预处理器的文本输出在空白方面是什么样子的。文本输出是具体实现的。有相当大的解释空间。定义的是至少一个空格字符必须在哪里,并且所有的符号都必须留在它们原来的行上(或者用它们原来的行标记),以便错误消息有意义。
- VSCode 中带有 C/C++ 扩展名的多行注释缩进错误
- 如何设置叮当格式的注释编译指示,以免触及多行doxygen注释?
- 如何阻止 ReSharper 在 C++ 中格式化多行注释
- C++,在多行代码段中注释
- QSyntax荧光笔和多行注释
- 从文件中读取多行.txt字符串删除空格并创建新文件进行输出
- 取消脱壳:使用模板在多行类型定义中添加一个尖括号后的新行
- gcc多行注释警告
- 使用正则表达式匹配多行C++样式注释
- visualstudio继续多行注释
- 宏和多行注释
- 变量后的Doxygen多行注释
- VIM语法折叠:禁用折叠多行注释
- 使用RegEx剥离C++中的多行注释
- 用c++计算多行注释之间的所有行数
- 如何在氧代码示例中插入多行注释
- c++单行注释后面跟着多行注释中的变换
- 为什么在c++中注释多行注释不一致?
- 使用反斜杠的多行注释
- 多行注释和新行