显然,最好的解决方案是不嵌套您的评论。嵌套注释通常表示您使用的注释错误。最常见的示例是注释掉的代码,其中包含注释本身,而解决方法是删除代码而不是注释掉。
就是说,许多编程语言都具有不止一种注释语法,您可以使用此事实嵌套至少一层深度。例如,在Java中:
/* This is commented out!
Foo.bar.baz();
// And now for something completely different...
Quux.runWith(theMoney);
*/
同样,在许多语言中,至少一种评论类型是嵌套的;在类似C的语言中,将忽略行注释中的行注释:
// some_commented_out(code);
// // This is a comment inside the comment!
// // Still inside the nested comment.
// some_more_code_in(outer_comment);
大多数IDE支持在一个动作中用行注释注释整个代码块,并且它们正确处理了这种注释样式。Python中的相同示例:
# some_commented_out(code)
# # This is a comment inside the comment!
# # Still inside the nested comment.
# some_more_code_in(outer_comment)
通常,特定项目的编码标准都有关于何时使用哪种注释样式的规则。常见的约定是/* */
对方法和类文档使用块注释(),对//
方法主体等内部的注释使用内联注释(),例如:
/**
* Helper class to store Foo objects inside a bar.
*/
public class Foobar {
/**
* Stores a Foo in this Foobar's bar, unless the bar already contains
* an equivalent Foo.
* Returns the number of Foos added (always 0 or 1).
*/
public int storeFoo(Foo foo) {
// Don't add a foo we already have!
if (this.bar.contains(foo)) {
return 0;
}
// OK, we don't have this foo yet, so we'll add it.
this.bar.append(foo);
return 1;
}
}
使用这种样式,您几乎不需要嵌套/* */
注释(如果必须暂时禁用整个方法或类,则对它们进行重命名也可以很好地工作,即使不是更好)。和//
注释会嵌套,至少在您的IDE的帮助下。
最后,要禁用代码,您可以使用许多编程语言提供其他选项;例如,在C语言中,您可以利用预处理器:
this_is(activated);
#if 0
this_is(!activated);
/* Comments inside this block don't really nest, they are simply removed
along with the rest of the block! */
#endif
在动态语言中,通常可以使用正则if
语句来代替:
<?php
if (0) {
// This should never run...
some_stuff_that_should_never_run();
}
但是,与CPP示例不同,此策略要求源文件作为一个整体在语法上有效,因此到目前为止,它并不那么灵活。
最后,至少有些语言允许嵌套注释。如果您有兴趣,Wikipedia有一个不错的比较表。