2

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

如果我有:

/*
int commented_out = 0;
*/

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

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

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

4

3 回答 3

19

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

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

现在,从头开始删除一个斜杠,它变成

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

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

于 2008-11-11T23:47:37.047 回答
10

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

我倾向于使用#if 0这种东西并将其更改#if 1为取消注释,如下所示:

#if 0
    int commented_out = 0;
#endif

然后我根本不必担心评论标记。

于 2008-11-11T23:40:13.023 回答
1

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

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

甚至是 XML 注释

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

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

--[[---------
---------]]--
于 2009-03-31T00:21:32.580 回答