为什么C ++不支持“嵌套注释”?

Ted*_*Ted 3 c++ compiler-errors

在C ++中,多行注释以开头/*和结尾*/

但是,如果发生以下情况,则会导致编译错误

/*
int a = 20;
  /*
   int b = 10;

  */ 
*/
Run Code Online (Sandbox Code Playgroud)

有什么原因为什么C ++不支持这种“嵌套注释”样式?

P.W*_*P.W 5

C ++标准对此进行了说明:

5.7注释[lex.comment]
1字符/*开始注释,该注释以字符结尾*/这些注释不嵌套。字符//开始注释,该注释在下一个换行符之前立即终止。如果这样的注释中有换页符或垂直制表符,则在它和终止注释的换行符之间只能出现空格字符;无需诊断。[注意:注释字符///**///注释内没有特殊含义,与其他字符一样。同样,注释字符//,并/*有中没有任何特殊含义/*的评论。—尾注]

重点已添加。

由于注释/*内没有任何特殊含义/*,因此第一个*/后跟/*将被视为多行注释的结尾。然后,另一个*/将被视为悬空。

  • 我认为猜测并不难。可能这样做是为了允许编译器在词法分析器阶段删除注释,而不必稍后担心 (2认同)