//样式注释可以像多行宏一样使用反斜杠继续到下一行吗?例如。
// 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发布于 2011-08-15 04:37:03
是。在转换过程中,由\终止的线路会与下一条线路拼接在一起。它发生在翻译的第二阶段,在注释删除之前,在预处理器有机会完成它的工作之前。
注释识别和删除是在阶段3进行的。因此,您可以使用\将//注释转换为看起来像多行注释的注释。这通常会欺骗大多数语法突出显示的源代码解析器。
预处理器在阶段4工作。
这意味着您几乎可以使用\“多行”任何东西,包括注释和预处理器指令
#\
d\
e\
f\
i\
n\
e \
ABC \
int i
int main() {
A\
B\
C = 5;
}附注:请注意,终止\不会在拼接行中引入任何空格。在使用\功能编写多行注释时,应该考虑到这一点。例如,下面的注释
// to\
get\
her代表一个单词“在一起”,而不是三个单独的单词“得到她”。显然,在注释中不正确地使用\可能会严重混淆甚至扭曲注释的本意。
发布于 2011-08-15 05:17:23
这里有一个很好的理由不要这样做。下面的程序打印"This will prints“。
#include <iostream>
int main()
{
std::cout << "This "
// A comment ... \
<< "will appear"
// Another comment ... \
<< ", but this won't"
<< std::endl;
}为什么?因为第一个\后面跟着一个空格,所以它只是注释的一部分,而不是行拼接字符。由于不可见的尾随空格,程序的行为可能会悄悄地发生重大变化。
不这样做的一个更好的理由是:即使使用-pedantic,g++也会出错。当我使用g++编译这个程序时,输出就是" this ";第一个\后面的空格被忽略了。在我看来,这是它应该如何工作的,但这不是语言标准所说的。(行拼接发生在翻译阶段2。我想有人可能会争辩说,尾随的空格可以在阶段1中删除,但我不相信这是一个有效的论点--我不知道gcc的作者是否真的提出了这个论点。)在任何情况下,Sun4.5.2和g++ CC版本5.5都不一致。
如果需要多行注释,请使用/* ... */或在每行开头插入//。我更喜欢后者,因为它更容易分辨出给定行是注释的一部分。(实际上是多个单行注释。)任何像样的编辑器都应该让你不用为N行输入// N次就能做到这一点。或者,如果您要注释掉一段代码,请使用#if 0 ... #endif。
发布于 2011-08-15 04:35:59
我最初说“不,你不能”。
但我还是要说“不,你不应该”!
请改用/* */。
示例:
#include <stdio.h>
int main ()
{
// Begin comment \
continue comment?
return printf ("Hello world!\n");
}出于其他帖子中解释的原因,上面的内容进行了编译。但这是错误的:
就像通过鼻子吃菜豆一样:即使你可以,你也可能不应该。
我的..。
https://stackoverflow.com/questions/7059549
复制相似问题