块注释是否旨在使用单个字符启用/禁用块
Was the block comment designed to enable/disable blocks using a single character?
观察以下代码块:
//*
... code block ...
//*/
只需使用第一个斜杠即可启用/禁用它。
/*
... code block ...
//*/
这是有意为之,还是一个快乐的巧合?
关于此事似乎没有任何历史。
我怀疑你能说它是这样设计的。块注释是在单行注释出现之前以 C 方式引入的 - 这就是添加另一个斜杠后的代码最终的结果。
我宁愿称之为快乐的巧合。
/* */
注释源自 C,并被 C++ 采用。然后,C++为单行注释添加了//
。你展示的是这两种评论相互作用的一个很好的例子。我怀疑有人在编写标准时想到了这一点——如果他们这样做了,他们可能会想"只是不要那样做"。
说它是设计出来的还是"快乐的巧合"。 它似乎是为我设计的(但我认为这也取决于评论行之间的内容)。
看来我误解了这个问题 - 我认为 OP 遇到了一些代码,其中的注释以这种方式格式化,并想知道编写它的人是否打算通过单个字符更改来启用/禁用它。
至于 C 注释样式是否旨在允许这种行为,我很确定答案是否定的。 C99 标准理由文档没有提到该技术,我认为如果注释旨在启用它,那么该技术将在基本原理中。 事实上,基本原理明确指出,不应使用注释来禁用代码,而应改用预处理器机制。
此外,如果注释语法旨在允许这种聪明(我确实认为它很聪明),我相信以前有人会写过它。 这是我第一次看到这种混合注释样式以启用/禁用代码块的特殊技术。
我偶尔会为某些类型的调试设计做类似的事情(我不主张将以下构造提交到版本控制 - 如果您真的需要在两个或多个替代方案之一之间进行选择,请使用 prepossessing with #if
或类似):
int x = /**/ 123 /*/ 456 /**/;
如上所述,123
将处于活动状态,456
将被注释掉。
删除前两个'*'
字符之一将使123
处于非活动状态,456
处于活动状态。
- C++字符*缓冲区的大小
- HEX值到wchar_t字符(UTF-8)的转换
- 编译时未启用intel oneApi CUDA支持
- 为什么 Serial.println(<char[]>);返回随机字符?
- 我的字符计数代码计算错误.为什么
- 字符串-C++后显示的随机字符
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 如何在C++中从字符串中分割字符
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 指向指向字符数组的指针数组的指针
- 如何用转义符替换字符串中的所有特殊字符
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 比较字符数组
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何在C++中确定文本文件中的元素是字符还是数字
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 块注释是否旨在使用单个字符启用/禁用块