又一年即将结束,是时候盘点一下开源项目中的 Bug 了。2020 年的盘点可能还需要点时间,本文我们先来看看 2019 年开源 C/C++ 项目中遇到的一些最有趣的槽点。
No. 10. 我们正运行在什么操作系统上?
V1040 可能拼写错误预定义宏名称。’MINGW32_‘有点儿像’MINGW32__’。winapi.h 4112
MINGW32_ 宏的名称拼写有误(MINGW32 实际上被声明为MINGW32__)。在项目的其它地方,拼写是正确的:
顺便说一句,这个 bug 并不是在文章"CMake: the Case when the Project’s Quality is Unforgivable"中首次被描述,而是在一个开源项目的 V1040 诊断中就真正被第一次发现的 bug(2019 年 8 月 19 日)。
https://www.viva64.com/en/b/0658/?ref=hackernoon.com
No. 9. 哪个先?
V502 可能’?:‘运算符的工作方式与预期不符。’?:‘运算符的优先级比’=='运算符低。mir_parser.cpp 884
我们感兴趣的下面的部分:
'=='运算符的优先级比三元运算符 (?:) 高。因此,这个条件表达式的求值顺序错误,等效于如下代码:
由于常量 OP_intrinsiccall 和 OP_intrinsiccallassigned 都是非 null 的,这个条件会一直返回 true,这意味着 else 分支是无法访问的代码。
这个 bug 在文章"Checking the Ark Compiler Recently Made Open-Source by Huawei"中被提到。
https://www.viva64.com/en/b/0690/?ref=hackernoon.com
No. 8. 危险的位运算符
V1046 在位运算符’&='中不安全地使用’bool’和’int’类型。GSLMultiRootFinder.h 175