看到 Linux 内核 Git 仓库的一个 Pull Request, 修正了一个漏分号的错误 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
snowonion
V2EX    Linux

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

  •  
  •   snowonion 2014-08-01 17:26:05 +08:00 4667 次点击
    这是一个创建于 4114 天前的主题,其中的信息可能已经有所发展或是发生改变。
    https://github.com/torvalds/linux/pull/84/files

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

    是不是 Mr. Torvalds 他们对代码的检查是周期性进行的, 而非 merge 每个 Pull Request 时都会检查?
    第 1 条附言    2014-12-04 17:31:35 +08:00
    结论:
    list_for_each 是个宏。根据它的展开内容,加分号是不必要的。所以那个 Pull Request 是不必要的。
    13 条回复    2014-08-10 10:16:39 +08:00
    wwqgtxx
        1
    wwqgtxx  
       2014-08-01 17:40:45 +08:00 via Android   1
    有可能是git merge导致的错误,有些时候git merge时会导致一些莫名其妙的错误
    ChiangDi
        2
    ChiangDi  
       2014-08-01 17:45:08 +08:00
    这也行,真是惊呆了,他们不测试就提交的?
    akfish
        3
    akfish  
       2014-08-01 17:46:04 +08:00
    看下blame不就知道了
    dorentus
        4
    dorentus  
       2014-08-01 17:48:16 +08:00   1
    编译错误一般来说不是人工检查的重点,大都是用自动化的系统来检查的吧,一般是异步的。

    然后 Linux 项目并不使用 Github 的 Pull Request 功能: https://github.com/torvalds/linux/pull/17#issuecomment-5654674
    akfish     6
    akfish  
       2014-08-01 17:59:09 +08:00   3
    其实我想吐槽的是这不是bug。。。。
    list_for_each并不是函数调用,而是一个宏
    https://github.com/torvalds/linux/blob/164c09978cebebd8b5fc198e9243777dbaecdfa0/drivers/staging/usbip/userspace/libsrc/list.h#L110
    dorentus
        7
    dorentus  
       2014-08-01 17:59:09 +08:00   1
    仔细看了下,这 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
        8
    fo2w  
       2014-08-01 18:05:22 +08:00   1
    从代码和conversation看这不是个bug, 而且是编的过的啊
    这展开仅仅是个for循环而且下一行就是循环体snd_usbmidi_disconnect(midi);
    还专门缩进了用来提醒!
    就这么贸然加个分号, 让循环体怎么想.....
    limon
        9
    limon  
       2014-08-01 19:00:17 +08:00
    在c里xxx_for_each这种命名明显就是宏嘛。。。
    snowonion
        10
    snowonion  
    OP
       2014-08-03 12:43:36 +08:00
    谢谢各位~
    跟 C 语言不熟, 没想到宏这回事=.=

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

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

    看着真像python。。
    Youmu
        12
    Youmu  
       2014-08-09 08:50:51 +08:00   1
    @snowonion 这个编译就会出错呀,宏替换的时候不会替换那多余的`:'的。
    snowonion
        13
    snowonion  
    OP
       2014-08-10 10:16:39 +08:00
    @Youmu 多谢~ 窝又没试就口胡啦_(:3」∠)_
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5651 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 06:30 PVG 14:30 LAX 22:30 JFK 01:30
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86