c - 静态程序分析:cppcheck 标记变量声明时的冗余赋值
问题描述
想象一下:
#define OK 0
#define ERROR -1
int foo(void) {
int rv = OK;
rv = bar();
return rv;
}
在这种情况下,cppcheck
会将该行标记int rv = OK;
为冗余分配Message: Variable 'rv' is reassigned a value before the old one has been used.
我想知道为什么会这样,我认为初始化变量是正确的做法,不是吗?
解决方案
就像评论中已经提到的那样 - 您分配一个值并立即覆盖它而不使用初始值。
您提供的示例对于将所有变量声明放在顶部的代码很常见,在这种情况下,即使从未使用过,最好提前初始化它们。
该示例还可能指的是过去存在中间代码的情况,此后该代码已被删除,因此您可以按照评论中的建议将其合并为一行。
在那些情况下,它只是关于干净的代码,因为它是不必要的。
但是想象一下这种情况:
extern int bar();
int foo(void) {
int rv = bar();
rv = bar();
return rv;
}
这表明您可能忘记了中间返回值的处理。在这段代码中,它看起来很明显,但想象一下有几个调用会覆盖它,或者中间有更多的逻辑,你可能会忽略它。
clang-analyzer-deadcode.DeadStores
第二种情况也被 clang-tidy/Clang 静态分析器通过检查警告: Value stored to 'rv' during its initialization is never read
。
推荐阅读
- elixir - 如何通过手动调用在生产中运行自定义任务?
- dart - 为什么将动态分配给不可为空而不是具有良好空安全性的错误
- python - 仅向前填充某个值
- python - 卷积层对不同的输入返回相同的结果
- python - if 语句变量
- android - 如何使用 Camerax 将视频的确切创建时间设置为文件名
- html - 如何覆盖 Bootstrap 的默认字体大小?
- python - 我如何邀请自己到我的不和谐机器人所在的服务器?
- reactjs - 为什么我的自定义域间歇性地得到 ERR_CONNECTION_REFUSED,但 Netlify 站点很好?
- flutter - 在颤动中出错:-getter 在 null 上被调用