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

2013-12-30 18:26:16 +08:00
 asdftu
附上:

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

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

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

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

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

http://www.infoq.com/cn/news/2013/12/Linux-Backdoor
loseblue
2013-12-31 21:45:02 +08:00
一般这种东西良好的写法是
if(1 == a)
如果不小心写成=,会由于给常数赋值而报错。

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

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

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

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

© 2021 V2EX