最近遇到一个奇怪的问题:C 的代码库,给定文件和行号,要求在给定的行添加注释来做标记,注释的内容只包含字母和数字。要求不能改坏代码。
在行末添加注释的话问题多多,暂时想到的方法就是在行的前面插入注释:/* comment0 */
(虽然看起来比较奇怪)
目前还没拿到代码,除了下面这种极端的情况,暂时没想到这样改会有什么问题,想听见大家的建议。
1
secondwtq 2019-06-14 23:11:00 +08:00
什么标记?为什么一定要用注释做?
|
3
misaka19000 2019-06-14 23:23:05 +08:00
把注释写到网页上面,在代码里面插超链接
|
4
secondwtq 2019-06-14 23:23:08 +08:00 1
@wheeler 我觉得 90% 情况下行尾注释可以解决问题,行首注释对我来说不可以接受,太丑了
上面说的是单行的情况,你确定就不会有“这段代码有问题”的情况? 我的意思是,可能需要更完善的机制来让这个东西变得更好用。而不是把选项限制在“行首注释”或者“行尾注释”中。比如上面说的语句块的问题,你可以在把语句块用两行注释 /* FIXME_BEGIN */ /* FIXME_END */ 包裹起来,或者定义一个叫 FIXME 的宏之类的 |
5
youngxhui838 2019-06-14 23:23:33 +08:00 via Android
@wheeler todo ()
|
6
wheeler OP @secondwtq 感谢回复。目前只涉及单行的情况。
行尾注释在遇到下面这种情况会有问题,虽然后期编译可以发现就是了。 #include <stdio.h> int main(void) { printf("%s, %d, %d", "hello", \ /* hello */ 1, 2); return 0; } |
7
pkookp8 2019-06-15 02:42:14 +08:00 via Android
#define TODOLIST 1
#if TODOLIST comments #endif 可以不 |
8
junkman 2019-06-15 09:47:52 +08:00
> C 的代码库,给定文件和行号,要求在给定的行添加注释来做标记,注释的内容只包含字母和数字。要求不能改坏代码。
这个情况,在行前行尾添加注释都是不行的,因为多行连接的问题(\)会导致破坏代码正确性。 为什么不换一种方式觉得这种问题呢?比如在一个单独的文件添加错误标注呢? 或者说,这种错误标记可以在内存中停留吗,然后给到相应的处理程序?为什么一定要修改(侵略)文件呢? |
9
wheeler OP |
10
GuangXiN 2019-06-15 12:48:05 +08:00 via Android 1
写这个库的人就没个 code review 系统么?
|
11
junkman 2019-06-17 14:52:08 +08:00
@wheeler 从词法分析的角度来看,在一个 statement 开头添加 /* Block comment */是没有问题的,如果你能保证你的标注程序只标注在一个 statement 的开始,按照现有的 C syntax。
如果可能出现在一个 statement 的任意位置(比如中间位置),那么在出现多行连接的情况下,可能会产生诸如嵌套 /* Block comment */的问题,而大部分编译器是不支持嵌套 /* Block comment */的,因此这就导致无法编译通过。 不过上面的例子过于吹毛求疵了,如果你只是想问可行性的话,我觉得大部分情况都是可行的,现有编译器在提示错误的时候,基本上报错也出现在 statement 开始所在的行。 |