可以通过使用反斜杠(如多行宏)将样式注释继续到下一行吗?例如
// 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
Run Code Online (Sandbox Code Playgroud)
AnT*_*AnT 26
是.由a终止的\行在翻译过程的早期与下一行拼接在一起.它发生在翻译的第2阶段,在删除注释之前和预处理器有机会完成其工作之前.
注释识别和删除发生在第3阶段.因此,您可以使用//注释将注释转换为看起来像多行注释的注释\.这通常会欺骗大多数语法高亮的源代码解析器.
预处理器在第4阶段工作.
这意味着你可以使用\包括注释和预处理器指令在内的几乎任何东西"多线化"
#\
d\
e\
f\
i\
n\
e \
ABC \
int i
int main() {
A\
B\
C = 5;
}
Run Code Online (Sandbox Code Playgroud)
PS请注意,终止\不会在拼接线中引入任何空格.在使用该\功能编写多行注释时应考虑这一点.例如,以下评论
// to\
get\
her
Run Code Online (Sandbox Code Playgroud)
代表单词"在一起"而不是三个单独的单词"得到她".显然,\在评论中错误使用可能会大大模糊甚至扭曲其意图.
Kei*_*son 15
这是不这样做的一个很好的理由.以下程序打印"这将出现".
#include <iostream>
int main()
{
std::cout << "This "
// A comment ... \
<< "will appear"
// Another comment ... \
<< ", but this won't"
<< std::endl;
}
Run Code Online (Sandbox Code Playgroud)
为什么?因为第一个\后跟一个空格,所以它只是注释的一部分,而不是一个行拼接字符.由于隐藏的尾随空白,程序的行为可以安静地显着改变.
一个更好的理由不这样做:g ++错误,即使有-pedantic.当我用g ++编译这个程序时,输出只是"这个"; 第一个后面的尾随空格\被忽略.在我看来,这是它应该如何工作,但它不是语言标准所说的.(行拼接发生在翻译阶段2.我想有人可能会认为在第1阶段可以删除尾随空格,但我不相信这是一个有效的论据 - 我不知道gcc作者是否真的提出这个论点.)无论如何,g ++ 4.5.2和Sun CC版本5.5都不同意.
如果您想要多行注释,请使用/* ... */或//在每行的开头插入一个.我更喜欢后者,因为更容易判断给定的行是注释的一部分.(实际上它是多个单行注释.)任何体面的编辑器应该让你这样做而不用//N行键入N次.或者,如果您要注释掉一段代码,请使用#if 0 ... #endif.
| 归档时间: |
|
| 查看次数: |
14700 次 |
| 最近记录: |