c - 将魔数(Magic Number)分配给命名结构成员有什么问题?

标签 c clang-tidy magic-numbers

考虑以下代码:

const double Motor_Kv = 1.1e5; // Motor constant, [rpm/V]
const double Motor_R = 2e-2;   // Winding resistance, [Ohm]
const double Motor_J = 3e-6;   // Rotor angular mass, [kg*m2]

这已被重构为使用结构:

const MotorParams Motor = {
    .Kv = 1.1e5, // Motor constant, [rpm/V]
    .R = 2e-2,   // Winding resistance, [Ohm]
    .J = 3e-6,   // Rotor angular mass, [kg*m2]
};

但是,现在 clang-tidy 对使用“魔数(Magic Number)”感到不满:

warning: 1.1e5 is a magic number; consider replacing it with a named constant [readability-magic-numbers]

我知道我可以使用 //NOLINT 注释来消除不需要的警告,但我想了解警告背后的原因。是否存在第二个样本的代码可能导致错误而第一个样本是安全的情况?

最佳答案

静态分析器无法理解注释中的内容,因此他们可能不赞成使用“魔数(Magic Number)”。您可以通过执行以下操作来防止这种情况:

#define MOTOR_RPM_V         1.1e5  // Motor constant, [rpm/V]
#define MOTOR_WINDRES_OHM    2e-2  // Winding resistance, [Ohm]
#define MOTOR_ANGMASS_KG     3e-6  // Rotor angular mass, [kg*m2]

const MotorParams Motor = {
    .Kv = MOTOR_RPM_V,
    .R  = MOTOR_WINDRES_OHM,
    .J  = MOTOR_ANGMASS_KG,
};

关于c - 将魔数(Magic Number)分配给命名结构成员有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74728061/

相关文章:

c++ - linux C/C++ socket程序为什么不出现ECONNRESET错误

c - 尽管拥有所有必需的软件包,但无法使用 Hello World 示例在 Fedora 上编译 GTK4

android - ndk 中的 LocalBroadcastManager

android studio 3.3 clang-tidy

c++ - 我如何告诉 clang-tidy 切片特定的类是可以的?

c - 整数常量的无效后缀 "-252"

visual-studio - 如何在 Visual Studio 和 CMake 中使用 clang-tidy?

go - 无法启动进程 : invalid magic number in record at byte 0x0 Delve Golang

linux - 是否有任何与 Unix 'magic' 命令兼容的文件类型的 `file` header 集合?

winforms - 43679是魔数(Magic Number)吗?