块注释是否设计为使用单个字符启用/禁用块?

时间:2016-04-26 20:33:30

标签: c++ c syntax comments language-design

观察以下代码块:

//*
 ... code block ...
//*/

只需使用第一个斜杠即可启用/禁用它。

/*
 ... code block ...
//*/

这是设计,还是巧合? 在这件事上似乎没有任何历史。

3 个答案:

答案 0 :(得分:1)

我怀疑你可以说这是设计这种方式。在单行注释出现之前,以C方式引入了块注释 - 这就是您添加另一个斜杠后代码最终的结果。

我宁可称之为巧合。

答案 1 :(得分:1)

很难说它是设计还是'快乐巧合'。它似乎是为我设计的(但我认为这也取决于评论行之间的内容)。

似乎我误解了这个问题 - 我认为OP遇到了一些代码,其中包含了一种格式化的注释,并且想知道编写它的人是否打算通过单个字符更改来启用/禁用它。

至于C评论样式是否设计为允许这样的行为,我很确定答案是“不”。 C99标准理由文件没有提及该技术,如果评论旨在启用它,我认为这将是基本原理。事实上,基本原理明确说明不应该使用注释来禁用代码,而应该使用预处理器机制。

此外,如果评论语法旨在允许这一点聪明(我认为它很聪明),我相信有人会在此之前写过。这是我第一次看到这种混合注释样式以启用/禁用代码块的特殊技术。

我偶尔会为某些类型的调试设计类似的东西(我不提倡将以下构造提交给版本控制 - 如果你真的需要在其中一个之间选择,请使用#if或类似的预先设置两个或更多替代方案):

int x = /**/ 123 /*/ 456 /**/;

如上所述,123将处于有效状态,456将被注释掉。

删除前两个'*'个字符中的一个会使123处于非活动状态并且456处于活动状态。

答案 2 :(得分:1)

/* */评论来源于C并被C ++采用。然后,C ++为单行注释添加了//。 你展示的是这两种类型的评论相互作用的一个很好的例子。我怀疑在编写标准时是否有人想到这一点 - 如果他们这样做,他们可能会想到"只是不要这样做"。