【问题标题】:Commenting out comments注释掉评论
【发布时间】:2010-09-21 21:41:30
【问题描述】:

我注意到,使用 Visual Studio 2003,我可以“注释掉”我的 cmets,使它们不再是 cmets。这需要一个例子:

如果我有:

/*
int commented_out = 0;
*/

我可以用 // 注释掉 /* 和 */ 并且 /* 和 */ 中的代码不再“注释掉”(文本变为非注释颜色 并且编译器再次将其视为代码)。像这样:

///*
int commented_out = 0;
//*/

我发现 msvc 2003 确实如此,这是正常的 C++ 行为还是只是侥幸与此编译器一起工作?

【问题讨论】:

  • 如果你把 cmets 注释掉,你还能期待什么?

标签: c++ comments


【解决方案1】:

是的,这是完全正常的行为。 C++ 标准规定 /* 是注释块的开始,前提是它本身没有被注释掉。我经常使用您在上面编写的内容通过添加/删除一个字符来注释或取消注释代码块。在两个代码块之间切换的一个不错的小技巧,其中一个总是被注释掉:

//*
code block 1 (uncommented)
/*/
code block 2 (commented)
//*/

现在,从头删除一个斜线,它变成

/*
code block 1 (commented)
/*/
code block 2 (uncommented)
//*/

不是在生产代码中使用的东西,但对于快速调试更改非常有用。

【讨论】:

  • 之前没想到。太好了。
【解决方案2】:

它应该可以在任何编译器中工作,因为// 在输入流中首先遇到。

我倾向于将#if 0 用于此类内容并将其更改为#if 1 以取消注释,如下所示:

#if 0
    int commented_out = 0;
#endif

那我就完全不用担心评论标记了。

【讨论】:

    【解决方案3】:

    实际上,这几乎适用于任何具有 C 样式块 cmets 的语言。

    /*
    int foo = 0;
    /*/
    int foo = 1;
    //*/
    

    甚至是 XML cmets

    <!--->
    a
    <!-->
    b
    <!---->
    

    不幸的是,我在 lua 的光剑 cmets 上画了一个空白

    --[[---------
    ---------]]--
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-08
      • 2015-11-28
      • 2012-07-15
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2011-03-07
      • 1970-01-01
      相关资源
      最近更新 更多