C++ 中的嵌套注释

Posted

技术标签:

【中文标题】C++ 中的嵌套注释【英文标题】:Nested Comments in C++ 【发布时间】:2011-10-11 11:16:36 【问题描述】:

这应该是一个常见问题,可能类似于这里的一些问题,但我正在寻找注释掉 C++ 中包含 cmets 的多行(而不是方法)的最佳方法。我确实查看了一些关于 SO 但是的帖子无法获得有关使用 if #0 之类的完整的详细信息。

我确实查看了这篇帖子 Nested comments in Visual C++?,但我不在 Windows 平台上。

【问题讨论】:

【参考方案1】:

使用编辑器提供的任何方式在所有行的开头添加//

例如,在 Vim 中,您可以将行标记为可视块,然后在所有行的开头插入 I//。在 Visual Studio 中,您可以使用 CTRL-K-C 快捷方式来注释代码块。

【讨论】:

这就是 Vim 这样做的原因。【参考方案2】:

#if 0#endif 之间的内容将被编译器忽略。 (您的预处理器实际上可能会在“编译器”甚至可以查看它之前将其删除!)

#if 0

    /* 42 is the answer. */

    Have you tried jQuery?

    @Compiler Stop ignoring me!!

#endif

如果你使用#ifdefs,你会有更好的控制:

// #define DEBUG


#ifdef DEBUG
   MyFunction();
   std::cout << "DEBUG is defined!";
#endif


// Later in your code...

#ifdef DEBUG
    std::cout << "DEBUG is still defined!";
#endif

只需取消注释第一行,您的#ifdef DEBUG 代码就会突然对编译器可见。


附:这应该可以消除更多的困惑:

/*
    cout << "a";
    /*
        cout << "b";
    */
    cout << "c";
*/

输出应该是"c",假设你的编译器没有给你最后一个*/的错误。

【讨论】:

另一个需要注意的有用的事情是,您可以在编译时使用 gcc/g++(以及任何可敬的编译器)中的 -D 开关定义 DEBUG。例如,如果您想编译您的调试版本,您可以执行gcc main.c -DDEBUG,并且将为该编译定义 DEBUG。这比在文件中静态定义 DEBUG 更加通用。【参考方案3】:

假设您使用 Visual Studio 的另一条路线是有一个方便的键盘快捷键来注释所有当前选定的代码,在每行之前添加 //CTRL+K+CTRL+C 发表评论,CTRL+K+CTRL+U 取消评论。

【讨论】:

【参考方案4】:

你几乎是正确的;本质上,建议将代码段“if-def”出来。您要做的是使用预编译器指令#if 为您阻止代码。下面的例子表明我想忽略 if 和 endif 之间的所有内容。

#if 0
/* Giant comment
 it doesn't matter what I put here */

// it will be ignored forever.
#endif

不过,总体上回答您的问题;没有办法拥有复合 cmets,即

/* 
  /* */ <--- this closes the first /* 
*/ <--- this dangles.

【讨论】:

以上是关于C++ 中的嵌套注释的主要内容,如果未能解决你的问题,请参考以下文章

触动精灵脚本开发 Lua 简明教程_注释

MongoDB 中单个父注释中的嵌套(子)注释

Lua特性和一些基础语法

XML中的嵌套注释?

java中的嵌套多行注释

Django REST Framework 序列化程序中的嵌套注释字段