C++ 点评

C++ 点评,c++,comments,C++,Comments,我注意到,使用VisualStudio2003,我可以“注释掉”我的注释,使它们不再是注释。这一个需要一个例子: 如果我有: /* int commented_out = 0; */ 我可以用//注释掉/*和*/并且/*和*/中的代码不再是“注释掉的”(文本更改为非注释颜色并且编译器再次将其视为代码)。像这样: ///* int commented_out = 0; //*/ 我发现这对于MSVC 2003是正确的,这是正常的C++行为还是仅仅是与这个编译器一起工作的侥幸? 它应该在任何编译

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

如果我有:

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

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

我发现这对于MSVC 2003是正确的,这是正常的C++行为还是仅仅是与这个编译器一起工作的侥幸?

它应该在任何编译器中工作,因为在输入流中首先遇到<代码> //< /> >

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

#if 0
    int commented_out = 0;
#endif

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

是的,这是完全正常的行为。C++标准表示,只有在注释本身没有注释时,“注释> >代码>才是注释块的开始。我经常使用您上面所写的内容,通过添加/删除一个字符来注释或取消注释代码块。在两个代码块之间切换的一个很好的小技巧是:

//*
code block 1 (uncommented)
/*/
code block 2 (commented)
//*/
现在,从开始处删除一条斜线,它将变为

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

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

实际上,这在几乎任何带有C风格块注释的语言中都可以使用

/*
int foo = 0;
/*/
int foo = 1;
//*/
甚至是XML注释

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

如果你把这些评论注释掉,你还能指望什么呢?我以前没想过。太好了。
--[[---------
---------]]--