☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

不应存在 magic number

11.13 ID_literal_magicNumber
目录 › next › previous

直接出现在代码中的字面数值称为 magic number,使人难以理解其含义,不利于阅读和维护,应改用具有适当名称的常量或枚举项。

示例:

double foo(double b) {
    double a = b * 1.618034;   // Non-compliant, 1.618034 is a magic number
    return a * (a + b);
}

double bar(double a) {
    double b = a * 0.618034;   // Non-compliant, 0.618034 is a magic number
    return a * (a + b);
}

例中 1.618034 不能表示其含义,而且当这种 magic number 散落在代码的各个角落时,不便于统一管理,造成维护上的困难。

应改为具有名称的常量:

const double goldenRatio = 1.618034;   // Compliant

double foo(double b) {
    double a = b * goldenRatio;   // Compliant
    return a * (a + b);
}

double bar(double a) {
    double b = a * (goldenRatio - 1);   // Compliant
    return a * (a + b);
}

常量初始化表达式中的字面数值,以及表示序号起始或简单状态的 0、1 等小字面数值可不受本规则约束。

相关

ID_literal_magicString

参考

CWE-1106 C++ Core Guidelines ES.45
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.