メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

== 演算子の無効な使用

代入ステートメント内の等号演算子

説明

この欠陥は、単純なステートメントで代入演算子ではなく等号演算子が使用された場合に発生します。

リスク

= 演算子ではなく == 演算子を使用すると、気付かないうちに間違った結果が生じる可能性があります。変数に値を代入することを意図していた場合、代入は行われません。変数は以前の値を保持するか、以前に初期化されていない場合、未初期化のままになります。

修正方法

== (等号) 演算子ではなく、= (代入) 演算子を使用します。

次のような代入演算子と等号演算子の連鎖に対してチェックが表示されます。

compFlag = val1 == val2;
コードの可読性を高めるために、等価性チェックをかっこに入れます。
compFlag = (val1 == val2);

== 演算子の使用を意図している場合は、改めてレビューされないように結果またはコードにコメントを追加します。詳細は、以下を参照してください。

すべて展開する

void populate_array(void)
{
    int i = 0;
    int j = 0;
    int array[4];

    for (j == 5; j < 9; j++) {
        array[i] = j;
        i++;
    }
}

for ループ内で、ステートメント j == 5j を 5 に設定するのではなく、j が 5 と等しいかどうかをテストします。j の値が 5 ではなく 0 から開始されるため、for ループは 0 から 8 まで反復します。等号演算子の無効な使用により、次の行で範囲外の配列アクセスが副次的に発生します。

修正 — 代入演算子に変更

1 つの修正方法として、== 演算子を 1 つの等号 (=) に変更することができます。== 記号を変更することで想定どおりの回数 for ループが反復されるため、両方の欠陥が解決します。

void populate_array(void)
{
    int i = 0;
    int j = 0;
    int array[4];

    for (j = 5; j < 9; j++) {
        array[i] = j;
        i++;
    }
}

結果情報

グループ: プログラミング
言語: C | C++
既定値: 手書きコードはオン、生成コードはオフ
コマンド ライン構文: BAD_EQUAL_EQUAL_USE
影響度: High

バージョン履歴

R2013b で導入