CXX.USE.MAGIC_NUMBER
マジックナンバーの使用
数値リテラル (整数値 0 と 1 を除く) の直接使用。多くの場合、0 と 1 はマジックナンバーではなく、コードの基本的なロジックの一部です (たとえば、0 は NULL ポインターを表すことがよくあります)。そのようなケースでは、0 と 1 を使用できます。
脆弱性とリスク
マジックナンバーを使用すると、コードのメンテナンス作業が増えがちです。同じ定数が他の場所でも使用されていて、1 つ以上のインスタンスが最新状態に保たれていない場合、予期しない動作が発生する可能性があります。
軽減と防止
マジック番号を定数定義またはマクロ定義に置き換えます。
脆弱コード例
コピー
#define MACRO 23
enum e { start = 4, end };
const int i = 34;
int j = 10; // Violation
char c = 'c';
char* s = "string";
bool b = true;
float f = 1.0; // Violation
int func (int a)
{
a = MACRO;
a = e.start;
a = i;
a = 0;
a = 1;
a = 29; // Violation
return a;
}
上記の例では、変数 j および f の宣言、29 へのパラメーター a の割り当ては、どれもこの規則に違反しています。文字列、文字、整数値 0 と 1 は、どれもこの規則の例外です。