メインコンテンツ

CWE Rule 563

Assignment to Variable without Use

R2023a 以降

説明

ルールの説明

The variable's value is assigned but never used, making it a dead store.

Polyspace 実装

ルール チェッカーは、"読み取りのない書き込み" をチェックします。

すべて展開する

問題

この問題は、変数に代入された値が読み取られない場合に発生します。

たとえば、変数に値を書き込んだ後、前の値を読み取る前に 2 番目の値を書き込みます。この最初の書き込み操作は冗長です。

リスク

冗長な書き込み操作は多くの場合、プログラミング エラーを示します。たとえば、2 つの連続した書き込み操作の間に変数を読み取るのを忘れていたり、意図せずに別の変数を読み取っていたりします。

修正方法

変数に書き込んだが、後にその変数を読み取っていない理由を特定します。名前が似ている別の変数を誤って読み取っているなど、一般的なプログラミング エラーを探します。

書き込み操作が冗長であると判断したら、その操作を削除します。

例 — 読み取りを進めずに書き込むエラー
void sensor_amplification(void)
{
    extern int getsensor(void);
    int level;

    level = 4 * getsensor();  //Noncompliant
    /* Defect: Useless write */
}

変数 level に値 4 * getsensor() が代入された後、この値は読み取られていません。

修正 — 代入後に値を使用

1 つの修正方法として、代入後に変数 level を使用することができます。

#include <stdio.h>

void sensor_amplification(void)
{
    extern int getsensor(void);
    int level;

    level = 4 * getsensor(); 
    
    /* Fix: Use level after assignment */
    printf("The value is %d", level);
    
}

変数 level は新しい値を読み取ったうえで出力されます。

チェック情報

カテゴリ: Bad Coding Practices

バージョン履歴

R2023a で導入