メインコンテンツ

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

無意味な if

説明

この欠陥は、条件が常に true である if ステートメントで発生します。この欠陥は if ステートメントが else ステートメントを伴わない時のみ発生します。

この欠陥は if ステートメントを削除してもコード実行に違いがないときに、不要な if ステートメントを表示します。

リスク

不要な if ステートメントは多くの場合、コーディング エラーを示します。おそらく、if 条件が適切にコーディングされていないか if ステートメントが完全に不要です。

修正方法

修正方法は欠陥の根本原因によって異なります。たとえば、同じ実行パスで 2 回チェックされるエラー状態が根本原因で、2 回目のチェックが冗長になっている可能性があります。

多くの場合、結果の詳細 (または Polyspace as You Code のソース コード ツールヒント) には欠陥につながる一連のイベントが表示されます。そのシーケンス内のどのイベントについても修正を実装できます。結果の詳細にイベント履歴が表示されない場合は、ソース コード内で右クリック オプションを使用して、欠陥に関連する変数のこれまでの参照を検索し、関連するイベントを検出できます。Polyspace デスクトップ ユーザー インターフェイスでの Bug Finder の結果の解釈またはPolyspace Access Web インターフェイスでの Bug Finder の結果の解釈 (Polyspace Access)も参照してください。

以下の修正例を参照してください。

冗長な条件が防御的なコーディング手法を表すもので、問題を修正する必要がない場合は、改めてレビューされないように結果またはコードにコメントを追加します。詳細は、以下を参照してください。

すべて展開する

typedef enum _suit {UNKNOWN_SUIT, SPADES, HEARTS, DIAMONDS, CLUBS} suit;
suit nextcard(void);
void do_something(suit s);

void bridge(void)
{
    suit card = nextcard();
    if ((card < SPADES) || (card > CLUBS)){
        card = UNKNOWN_SUIT;
    }

    if (card < 7) {
        do_something(card);
    }
}

suit 型は 5 つのオプションで列挙されます。ただし、条件式 card < 7card の最大値が 5 であるため常に真と評価されます。if ステートメントは不要です。

修正 — 条件の変更

1 つの修正方法としてコードの if 条件を変更することができます。この修正では、7 は UNKNOWN_SUIT に変更され、card 型に直接関連付けます。

typedef enum _suit {UNKNOWN_SUIT, SPADES, HEARTS, DIAMONDS, CLUBS} suit;
suit nextcard(void);
void do_something(suit s);

void bridge(void)
{
    suit card = nextcard();
    if ((card < SPADES) || (card > CLUBS)){
        card = UNKNOWN_SUIT;
    }

    if (card > UNKNOWN_SUIT) {
        do_something(card);
    }
}
修正 — if の削除

別の修正方法として、コード内の if 条件を削除します。条件は常に真であるため、条件を削除しコードを単純化できます。

typedef enum _suit {UNKNOWN_SUIT, SPADES, HEARTS, DIAMONDS, CLUBS} suit;
suit nextcard(void);
void do_something(suit s);

void bridge(void)
{
    suit card = nextcard();
    if ((card < SPADES) || (card > CLUBS)){
        card = UNKNOWN_SUIT;
    }

    do_something(card);
}

結果情報

グループ: データ フロー
言語: C | C++
既定値: オン
コマンド ライン構文: USELESS_IF
影響度: Medium

バージョン履歴

R2013b で導入

すべて展開する