看到 Linux 内核 Git 仓库的一个 Pull Request, 修正了一个漏分号的错误

2014-08-01 17:26:05 +08:00
 snowonion
https://github.com/torvalds/linux/pull/84/files

↑ 原先的代码应该是会出编译错误吧? 为什么有编译错误的代码会进入仓库呢...

是不是 Mr. Torvalds 他们对代码的检查是周期性进行的, 而非 merge 每个 Pull Request 时都会检查?
4237 次点击
所在节点    Linux
13 条回复
wwqgtxx
2014-08-01 17:40:45 +08:00
有可能是git merge导致的错误,有些时候git merge时会导致一些莫名其妙的错误
ChiangDi
2014-08-01 17:45:08 +08:00
这也行,真是惊呆了,他们不测试就提交的?
akfish
2014-08-01 17:46:04 +08:00
看下blame不就知道了
dorentus
2014-08-01 17:48:16 +08:00
编译错误一般来说不是人工检查的重点,大都是用自动化的系统来检查的吧,一般是异步的。

然后 Linux 项目并不使用 Github 的 Pull Request 功能: https://github.com/torvalds/linux/pull/17#issuecomment-5654674
akfish
2014-08-01 17:55:11 +08:00
akfish
2014-08-01 17:59:09 +08:00
其实我想吐槽的是这不是bug。。。。
list_for_each并不是函数调用,而是一个宏
https://github.com/torvalds/linux/blob/164c09978cebebd8b5fc198e9243777dbaecdfa0/drivers/staging/usbip/userspace/libsrc/list.h#L110
dorentus
2014-08-01 17:59:09 +08:00
仔细看了下,这 Pull Request 不对……

list_for_each 大概是个宏,用法类似 for 或者 foreach:

例如 https://github.com/torvalds/linux/blob/164c09978cebebd8b5fc198e9243777dbaecdfa0/drivers/usb/mon/mon_main.c:

list_for_each (p, &mon_buses) {
struct mon_bus *m1;
m1 = list_entry(p, struct mon_bus, bus_link);
m1->u_bus->monitored = 1;
}

Pull Request 里面的下一行明显有个锁进,所以只是类似单行 for 省略了大括号而已;加了分号之后,即使不会报错,语义也变了。
fo2w
2014-08-01 18:05:22 +08:00
从代码和conversation看这不是个bug, 而且是编的过的啊
这展开仅仅是个for循环而且下一行就是循环体snd_usbmidi_disconnect(midi);
还专门缩进了用来提醒!
就这么贸然加个分号, 让循环体怎么想.....
limon
2014-08-01 19:00:17 +08:00
在c里xxx_for_each这种命名明显就是宏嘛。。。
snowonion
2014-08-03 12:43:36 +08:00
谢谢各位~
跟 C 语言不熟, 没想到宏这回事=.=

如果不是
#define list_for_each(pos, head)
而是
#define list_for_each(pos, head):
会不会有助于避免误解 ( ゚∀。)
zoudm
2014-08-04 10:10:43 +08:00
@snowonion

C里面目测不这样用 [:] 。。。

看着真像python。。
Youmu
2014-08-09 08:50:51 +08:00
@snowonion 这个编译就会出错呀,宏替换的时候不会替换那多余的`:'的。
snowonion
2014-08-10 10:16:39 +08:00
@Youmu 多谢~ 窝又没试就口胡啦_(:3」∠)_

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

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

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

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

© 2021 V2EX