V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
asdftu
V2EX  ›  分享创造

写了一个正则表达式查找代码库里边 if(a == b)写成if(a = b)的错误

  •  
  •   asdftu · 2013-12-30 18:26:16 +08:00 · 3062 次点击
    这是一个创建于 3769 天前的主题,其中的信息可能已经有所发展或是发生改变。
    附上:

    \bif\s?\([^=!<>\r\n]*=\s?[^=!<>\r\n]*\s?\)\s*\{

    长时间不写c++代码,今天竟然不知怎么回事写出了if(a = b)的错误代码,于是写了一个正则表达式来查询整个代码库里面有没有其他人有这样的错误。

    最后发现有一些第三方的库喜欢if(a=b)这样子用,
    意思为
    a=b;
    if(a)
    {

    }
    是他们的省一行代码的简写,不是错误。但,如果不是第三方库,自己人写的这样的代码,八成是错的。
    6 条回复    1970-01-01 08:00:00 +08:00
    skydiver
        1
    skydiver  
       2013-12-30 18:29:48 +08:00
    对这种的,编译器本来就有warning吧。。
    shiny
        2
    shiny  
       2013-12-30 18:30:03 +08:00
    我就经常这么写:
    if($result = fetch()){
    }

    但是有人批评不够直观。
    asdftu
        3
    asdftu  
    OP
       2013-12-30 18:38:23 +08:00
    @shiny 确实是不太直观...不过习惯就好
    zhujinliang
        4
    zhujinliang  
       2013-12-30 22:22:55 +08:00 via iPad
    中枪,我也经常这样写,if可能意义不大,但是while会方便不少
    Mutoo
        5
    Mutoo  
       2013-12-30 23:04:47 +08:00
    实际上这还是一种引入后门的方式,要注意了。

    http://www.infoq.com/cn/news/2013/12/Linux-Backdoor
    loseblue
        6
    loseblue  
       2013-12-31 21:45:02 +08:00
    一般这种东西良好的写法是
    if(1 == a)
    如果不小心写成=,会由于给常数赋值而报错。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4429 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 05:33 · PVG 13:33 · LAX 22:33 · JFK 01:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.