PVS-Studio ,静态代码分析器,用于以下代码
size_t const n = 4;
int a[n] = {};
报告:
V112 Dangerous magic number
4
used:...t const n = 4;. test.cpp 3
尽管 PVS-Studio 与 Visual Studio 2017 项目一起使用,并针对 32 位和 64 位报告相同的警告,但分析器 AFAIU 并未考虑这些构建配置。
我本来希望能更好地分析上下文并将上面的代码视为等同于此
int a[4] = {};
PVS-Studio 不会对其发出任何诊断。
在上面的例子中,这个使用了危险的魔数(Magic Number) N 是误报吗?
上面两个代码示例没有被分析为等效的原因是什么?
最佳答案
这个
size_t const n = 4;
int a[n] = {};
是误报。
64 位诊断非常嘈杂,您对此无能为力。是的,分析器会产生许多误报,例如 4
、0xFFFFFFFF
等魔数(Magic Number)。在分析器中,当它不提示时,已经产生了很多异常(例如:int a[4] = {};
)。然而,使用常量的选项仍然很多,不可能预见到所有这些选项。
当将代码移植到 64 位系统时,查看所有魔数(Magic Number)是有意义的,以确保程序员,例如,不期望某处的指针大小为 4
字节.然后关闭 V112 才有意义诊断,这样它就不会打扰你。
关于c++ - 使用了危险的魔数(Magic Number) N,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45195221/