c++ - 使用了危险的魔数(Magic Number) N

标签 c++ static-analysis pvs-studio

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 位诊断非常嘈杂,您对此无能为力。是的,分析器会产生许多误报,例如 40xFFFFFFFF 等魔数(Magic Number)。在分析器中,当它不提示时,已经产生了很多异常(例如:int a[4] = {};)。然而,使用常量的选项仍然很多,不可能预见到所有这些选项。

当将代码移植到 64 位系统时,查看所有魔数(Magic Number)是有意义的,以确保程序员,例如,不期望某处的指针大小为 4 字节.然后关闭 V112 才有意义诊断,这样它就不会打扰你。

关于c++ - 使用了危险的魔数(Magic Number) N,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45195221/

相关文章:

c++ - 为什么当我改变它的位置时光源没有移动?

java - 我可以在同一版本的 Eclipse 中创建 C++ 和 Java 项目吗?

java - 在 Java 中使用类依赖关系构建图形的工具

sql - 衡量 SQL 语句的复杂性

c++ - 在 Linux 上使用 CMake 时,如何告诉 PVS-Studio 忽略第三方库中的所有文件

c++ - 在 PVS-Studio 中 BOOST_REQUIRE 之后将变量标记为非 NULL

c++ - 在 C++11 中将指针转换为多维 C 样式数组

c++ - 声明时初始化的char数组?

C++:x64 不推荐使用 A2W 宏 - 替代方案?

c++ - Visual Studio 11 Ultimate 静态分析显示无输出