在我使用的大多数语言中,您根本无法嵌套块注释,因为“关闭”注释 sintaxis 的第一次出现会关闭该注释,即使它只是一个“内部”注释。
例如,在 HTML
<!-- outer comment
<p>hello</p><!-- inner comment <p>world</p> -->
<p>this should BE commented</p>
-->
在这种情况下,外部注释在第一个-->
而不是相应的最后一个结束,导致最后一个<p>
打印,而它不应该打印。
用于块注释的语言也是如此/* */
,例如 java、php、css、javascript 等。
但我的问题是为什么会这样?为什么在设计上是不允许的?我提到“按设计”是因为我真的怀疑这是因为解析问题,我猜解析器完全有能力跟踪 opens/*
并用相应的 close s 关闭评论*/
但他们只是以某种方式认为这不是一个好主意.
我已经知道解决此问题的方法是以某种方式更改内部结束注释,以避免它们关闭,并且只留下最后一个结束注释。例如,将内部-->
s 和*/
s 更改为- ->
s 和* /
s 。但这显然不方便,而且当您只想丢弃代码块以进行调试时很难做到。(其他技术是将所有内容嵌套在if(false){}
块中,但这不是重点。
那么,我想知道的是为什么在几种现代语言中通常不允许嵌套注释?除了“别人不做,我们也不做”之外,一定有充分的理由吧?
另外,还有其他(不是那么晦涩)允许嵌套块注释的语言吗?