请教一个关于 C 语言注释的问题

2019-06-14 22:07:14 +08:00
 wheeler

最近遇到一个奇怪的问题:C 的代码库,给定文件和行号,要求在给定的行添加注释来做标记,注释的内容只包含字母和数字。要求不能改坏代码。

在行末添加注释的话问题多多,暂时想到的方法就是在行的前面插入注释:/* comment0 */(虽然看起来比较奇怪)

目前还没拿到代码,除了下面这种极端的情况,暂时没想到这样改会有什么问题,想听见大家的建议。

2922 次点击
所在节点    C
11 条回复
secondwtq
2019-06-14 23:11:00 +08:00
什么标记?为什么一定要用注释做?
wheeler
2019-06-14 23:18:10 +08:00
@secondwtq 比如这行代码有问题,得安排人修复之类的。
misaka19000
2019-06-14 23:23:05 +08:00
把注释写到网页上面,在代码里面插超链接
secondwtq
2019-06-14 23:23:08 +08:00
@wheeler 我觉得 90% 情况下行尾注释可以解决问题,行首注释对我来说不可以接受,太丑了

上面说的是单行的情况,你确定就不会有“这段代码有问题”的情况?

我的意思是,可能需要更完善的机制来让这个东西变得更好用。而不是把选项限制在“行首注释”或者“行尾注释”中。比如上面说的语句块的问题,你可以在把语句块用两行注释 /* FIXME_BEGIN */ /* FIXME_END */ 包裹起来,或者定义一个叫 FIXME 的宏之类的
youngxhui838
2019-06-14 23:23:33 +08:00
@wheeler todo ()
wheeler
2019-06-14 23:34:29 +08:00
@secondwtq 感谢回复。目前只涉及单行的情况。

行尾注释在遇到下面这种情况会有问题,虽然后期编译可以发现就是了。

#include <stdio.h>

int main(void)
{
printf("%s, %d, %d", "hello", \ /* hello */
1, 2);

return 0;
}
pkookp8
2019-06-15 02:42:14 +08:00
#define TODOLIST 1
#if TODOLIST comments #endif

可以不
junkman
2019-06-15 09:47:52 +08:00
> C 的代码库,给定文件和行号,要求在给定的行添加注释来做标记,注释的内容只包含字母和数字。要求不能改坏代码。

这个情况,在行前行尾添加注释都是不行的,因为多行连接的问题(\)会导致破坏代码正确性。

为什么不换一种方式觉得这种问题呢?比如在一个单独的文件添加错误标注呢?

或者说,这种错误标记可以在内存中停留吗,然后给到相应的处理程序?为什么一定要修改(侵略)文件呢?
wheeler
2019-06-15 10:22:58 +08:00
@junkman 能说明下行首添加注释会有什么问题吗?

嗯。其实这像是个 XY problem,其实我感兴趣的是这么做会不会有问题。
GuangXiN
2019-06-15 12:48:05 +08:00
写这个库的人就没个 code review 系统么?
junkman
2019-06-17 14:52:08 +08:00
@wheeler 从词法分析的角度来看,在一个 statement 开头添加 /* Block comment */是没有问题的,如果你能保证你的标注程序只标注在一个 statement 的开始,按照现有的 C syntax。

如果可能出现在一个 statement 的任意位置(比如中间位置),那么在出现多行连接的情况下,可能会产生诸如嵌套 /* Block comment */的问题,而大部分编译器是不支持嵌套 /* Block comment */的,因此这就导致无法编译通过。

不过上面的例子过于吹毛求疵了,如果你只是想问可行性的话,我觉得大部分情况都是可行的,现有编译器在提示错误的时候,基本上报错也出现在 statement 开始所在的行。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/574093

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX