块注释是否旨在使用单个字符启用/禁用块

Was the block comment designed to enable/disable blocks using a single character?

本文关键字:字符 启用 单个 注释 是否      更新时间:2023-10-16

观察以下代码块:

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

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

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

这是有意为之,还是一个快乐的巧合?
关于此事似乎没有任何历史。

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

我宁愿称之为快乐的巧合。

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

很难

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

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

至于 C 注释样式是否旨在允许这种行为,我很确定答案是否定的。 C99 标准理由文档没有提到该技术,我认为如果注释旨在启用它,那么该技术将在基本原理中。 事实上,基本原理明确指出,不应使用注释来禁用代码,而应改用预处理器机制。

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

我偶尔会为某些类型的调试设计做类似的事情(我不主张将以下构造提交到版本控制 - 如果您真的需要在两个或多个替代方案之一之间进行选择,请使用 prepossessing with #if 或类似):

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

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

删除前两个'*'字符之一将使123处于非活动状态,456处于活动状态。