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,是假阳性?
上面两个代码示例没有被分析为等价的原因是什么?
这
\n\nsize_t const n = 4;\nint a[n] = {};\nRun Code Online (Sandbox Code Playgroud)\n\n是假阳性。
\n\n64 位诊断非常嘈杂,您对此无能为力。是的,分析器会产生许多误报,例如像4、0xFFFFFFFF等幻数。在分析器中,当它不\xe2\x80\x99t 抱怨时,已经产生了很多异常(例如:int a[4] = {};)。然而,使用常量的选项仍然太多,以至于无法预见所有选项。
将代码移植到 64 位系统时,检查所有幻数是有意义的,以确保程序员不会期望4某个地方的指针大小是字节。那么关闭V112诊断是有意义的,这样它就不会打扰您。