首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用反斜杠的C++多行注释

使用反斜杠的C++多行注释
EN

Stack Overflow用户
提问于 2011-08-15 04:34:35
回答 3查看 16.2K关注 0票数 20

//样式注释可以像多行宏一样使用反斜杠继续到下一行吗?例如。

代码语言:javascript
复制
// 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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-15 04:37:03

是。在转换过程中,由\终止的线路会与下一条线路拼接在一起。它发生在翻译的第二阶段,在注释删除之前,在预处理器有机会完成它的工作之前。

注释识别和删除是在阶段3进行的。因此,您可以使用\//注释转换为看起来像多行注释的注释。这通常会欺骗大多数语法突出显示的源代码解析器。

预处理器在阶段4工作。

这意味着您几乎可以使用\“多行”任何东西,包括注释和预处理器指令

代码语言:javascript
复制
#\
d\
e\
f\
i\
n\
e \
ABC \
int i

int main() {
A\
B\
C = 5;
}

附注:请注意,终止\不会在拼接行中引入任何空格。在使用\功能编写多行注释时,应该考虑到这一点。例如,下面的注释

代码语言:javascript
复制
// to\
get\
her

代表一个单词“在一起”,而不是三个单独的单词“得到她”。显然,在注释中不正确地使用\可能会严重混淆甚至扭曲注释的本意。

票数 28
EN

Stack Overflow用户

发布于 2011-08-15 05:17:23

这里有一个很好的理由不要这样做。下面的程序打印"This will prints“。

代码语言:javascript
复制
#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

票数 19
EN

Stack Overflow用户

发布于 2011-08-15 04:35:59

我最初说“不,你不能”。

但我还是要说“不,你不应该”!

请改用/* */。

示例:

代码语言:javascript
复制
#include <stdio.h>

int main ()
{
  // Begin comment \
     continue comment?
  return printf ("Hello world!\n");
}

出于其他帖子中解释的原因,上面的内容进行了编译。但这是错误的:

  • "//“用于单行注释(对于嵌套注释,应该使用"/* */”,对于多行注释,在"\“继续行上使用”\“是在程序中注入奇怪的、难以调试的错误的好方法。

就像通过鼻子吃菜豆一样:即使你可以,你也可能不应该。

我的..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7059549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档