使用反斜杠的多行注释
C++ Multi-line comments using backslash
//样式注释可以像多行宏一样使用反斜杠延续到下一行吗?例如
// here is a comment
and this is more comments
const char* x = "hello"; // this line of "code" is actually still a comment
int x = 5; // and now an actual line of code
是。以结尾的行在翻译过程中很早就与下一行拼接在一起。它发生在翻译的第二阶段,在注释删除之前,在预处理器有机会完成它的工作之前。
注释识别和删除发生在阶段3。出于这个原因,您可以使用将
//
注释转换为看起来像多行注释的注释。这通常会骗过大多数语法高亮的源代码解析器。
预处理器在阶段4工作。
这都意味着您可以使用"多行"几乎任何东西,包括注释和预处理器指令
#
d
e
f
i
n
e
ABC
int i
int main() {
A
B
C = 5;
}
注:请注意,结束的不会在拼接行中引入任何空白。在使用
特性编写多行注释时,应该考虑到这一点。例如,下面的注释
// to
get
her
代表一个单词"together",而不是三个单独的单词"together"。显然,在注释中不正确地使用可能会严重混淆甚至扭曲它们的预期含义。
这里有一个很好的理由不这样做。下面的程序打印"This will appear"
#include <iostream>
int main()
{
std::cout << "This "
// A comment ...
<< "will appear"
// Another comment ...
<< ", but this won't"
<< std::endl;
}
为什么?因为第一个后面跟着一个空格,所以它只是注释的一部分,所以不是是行拼接字符。由于不可见的尾随空白,程序的行为可以悄然而显著地改变。
不这样做的一个更好的理由是:g++会出错,即使是-pedantic
。当我用g++编译这个程序时,输出只是"this";忽略第一个后面的尾随空格。在我看来,这就是应该的工作方式,但这不是语言标准所规定的。(线拼接发生在翻译阶段2。我想有人可能会争辩说,末尾的空格可以在阶段1中删除,但我不相信这是一个有效的论点——我不知道gcc作者是否真的提出了这个论点。)无论如何,g++ 4.5.2和Sun CC 5.5都不一致。
如果您想要多行注释,要么使用/* ... */
,要么在每行的开头插入//
。我更喜欢后者,因为它更容易分辨出给定的一行是注释的一部分。(实际上是多个单行注释。)任何体面的编辑器都应该允许您在不为N行输入//
N次的情况下完成此操作。或者,如果你要注释掉一段代码,使用#if 0 ... #endif
。
我本来说的是"不,你不能"
但我仍然说"不,你不应该"!
用/* */代替
的例子:
#include <stdio.h>
int main ()
{
// Begin comment
continue comment?
return printf ("Hello world!n");
}
上述编译,原因在其他帖子中解释过。但这是错误的:
-
"//"用于单行注释(你应该使用"/* */"来嵌套,对于多行注释
-
依赖于""的延续行是在你的程序中注入奇怪的、难以调试的错误的好方法。
就像用鼻子吃豆子一样:即使你可以,你可能也不应该。
IMHO…
- VSCode 中带有 C/C++ 扩展名的多行注释缩进错误
- 如何设置叮当格式的注释编译指示,以免触及多行doxygen注释?
- 如何阻止 ReSharper 在 C++ 中格式化多行注释
- C++,在多行代码段中注释
- QSyntax荧光笔和多行注释
- gcc多行注释警告
- 使用正则表达式匹配多行C++样式注释
- visualstudio继续多行注释
- 宏和多行注释
- 变量后的Doxygen多行注释
- VIM语法折叠:禁用折叠多行注释
- 使用RegEx剥离C++中的多行注释
- 用c++计算多行注释之间的所有行数
- 如何在氧代码示例中插入多行注释
- c++单行注释后面跟着多行注释中的变换
- 为什么在c++中注释多行注释不一致?
- 使用反斜杠的多行注释
- 多行注释和新行
- c++正则表达式搜索多行注释(在/* */之间)
- 使用flex/bison进行多行注释声明