使用了危险幻数N.

mlo*_*kot 5 c++ static-analysis pvs-studio

PVS-Studio,静态代码分析器,用于以下代码

size_t const n = 4;
int a[n] = {};
Run Code Online (Sandbox Code Playgroud)

报告:

V112使用的危险幻数4:...t const n = 4;. test.cpp 3

尽管PVS-Studio与Visual Studio 2017项目一起使用并报告32位和64位的相同警告,但分析器AFAIU不会考虑这些构建配置.

我本来期望更好地分析上下文并将上面的代码视为等同于此

int a[4] = {};
Run Code Online (Sandbox Code Playgroud)

PVS-Studio不会发出任何诊断信息.

在上面这种情况下使用了这个危险的幻数N,是假阳性?

上面两个代码示例没有被分析为等价的原因是什么?

And*_*pov 3

\n\n
size_t const n = 4;\nint a[n] = {};\n
Run Code Online (Sandbox Code Playgroud)\n\n

是假阳性。

\n\n

64 位诊断非常嘈杂,您对此无能为力。是的,分析器会产生许多误报,例如像40xFFFFFFFF等幻数。在分析器中,当它不\xe2\x80\x99t 抱怨时,已经产生了很多异常(例如:int a[4] = {};)。然而,使用常量的选项仍然太多,以至于无法预见所有选项。

\n\n

将代码移植到 64 位系统时,检查所有幻数是有意义的,以确保程序员不会期望4某个地方的指针大小是字节。那么关闭V112诊断是有意义的,这样它就不会打扰您。

\n