看到 Linux 内核 Git 仓库的一个 Pull Request, 修正了一个漏分号的错误
- 0次
- 2021-07-16 17:18:01
- idczone
https://github.com/torvalds/linux/pull/84/files
↑ 原先的代码应该是会出编译错误吧? 为什么有编译错误的代码会进入仓库呢...
是不是 Mr. Torvalds 他们对代码的检查是周期性进行的, 而非 merge 每个 Pull Request 时都会检查?
有可能是git merge导致的错误,有些时候git merge时会导致一些莫名其妙的错误
这也行,真是惊呆了,他们不测试就提交的?
看下blame不就知道了
编译错误一般来说不是人工检查的重点,大都是用自动化的系统来检查的吧,一般是异步的。
然后 Linux 项目并不使用 Github 的 Pull Request 功能: https://github.com/torvalds/linux/pull/17#issuecomment-5654674
https://github.com/FriendlyHacker/linux/commit/63978ab3e3e963db28093b53bb4598f2702e1ad7/>2009年的一次commit引入的。
其实我想吐槽的是这不是bug。。。。
list_for_each并不是函数调用,而是一个宏
https://github.com/torvalds/linux/blob/164c09978cebebd8b5fc198e9243777dbaecdfa0/drivers/staging/usbip/userspace/libsrc/list.h#L110
仔细看了下,这 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 省略了大括号而已;加了分号之后,即使不会报错,语义也变了。
从代码和conversation看这不是个bug, 而且是编的过的啊
这展开仅仅是个for循环而且下一行就是循环体snd_usbmidi_disconnect(midi);
还专门缩进了用来提醒!
就这么贸然加个分号, 让循环体怎么想.....
在c里xxx_for_each这种命名明显就是宏嘛。。。
谢谢各位~
跟 C 语言不熟, 没想到宏这回事=.=
如果不是
list_for_each(pos, head)
而是
list_for_each(pos, head):
会不会有助于避免误解 ( ゚∀。)
C里面目测不这样用 [:] 。。。
看着真像python。。
这个编译就会出错呀,宏替换的时候不会替换那多余的`:'的。
多谢~ 窝又没试就口胡啦_(:3」∠)_