【发布时间】:2017-12-25 00:00:35
【问题描述】:
PVS-Studio,静态代码分析器,用于以下代码
size_t const n = 4;
int a[n] = {};
报告:
V112危险的魔法数字
4使用:...t const n = 4;. test.cpp 3
尽管 PVS-Studio 与 Visual Studio 2017 项目一起使用,并且针对 32 位和 64 位报告相同的警告,但分析器 AFAIU 并未考虑这些构建配置。
我希望能更好地分析上下文并将上面的代码视为等效
int a[4] = {};
PVS-Studio 不为其发出任何诊断。
在上面的例子中,这个使用了危险的幻数N,是误报吗?
上面两个代码示例没有被分析为等效的原因是什么?
【问题讨论】:
-
如果有什么我会假设第二个示例使用幻数不如第一个安全,因此更值得警告。似乎该警告与
n = 4相关,而不是使用n作为数组大小。 -
这一切都在您从 PVS-Studio 获得并发布的链接中进行了解释。甚至为什么
int a[4]没有收到警告。 -
@mloskot 数字 4 在表中被提及为在移植到 64 位时可能会导致问题并需要特别注意的数字之一。
int a[4]被提及为免于检查的特殊情况。使用 5 作为常量,不会有警告。 -
或者更好的是suppress this one instance 在发出警告的行之后添加
//-V112。 -
静态分析器可能有规则要求 0 或 1 以外的数字是宏;不管与第二种情况的等价性如何。
标签: c++ static-analysis pvs-studio