メインコンテンツ

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

MISRA C:2012 Rule 2.2

A project shall not contain dead code

説明

ルール定義

A project shall not contain dead code 1 .

根拠

到達可能ではあるものの、削除してもプログラムの動作に影響しない演算は、デッド コードとなります。

デッド コードの存在はプログラム ロジックのエラーを示している可能性があります。コンパイラはデッド コードを削除できるため、デッド コードの存在によりコード レビュー担当者が混乱する可能性があります。

Polyspace 実装

ルール チェッカーは、削除してもプログラムの動作に影響しない演算をルール違反として報告します。最も一般的なケースは、ある演算の結果が後で使用されることがないというものです。次に例を示します。

  • 演算を実行するものの、その結果を変数に (一時変数にも) 代入しない。

  • 演算の結果を変数に代入するものの、その変数を使用することがない。

  • 値を変数に代入するものの、その値を使用することがない。詳細については、読み取りのない書き込みを参照してください。

  • 演算の結果を変数に代入するものの、その直後に変数値を上書きする。

その他のあまり一般的ではない状況としては、空の関数の呼び出しや冗長な定数演算などがあります。定数が関係するこれらの演算の一部は、生成されたコード内で行われ、コンパイラによる最適化によって除去される可能性があります。たとえば、演算 2u * 1u は、コンパイラが 2u に最適化する可能性のある冗長な演算です。つまり、この演算が実行時に行われる可能性は低くなっています。コンパイラの最適化が行われるかどうかに関係なく、ルール チェッカーはこの演算に対する違反を報告します。

Polyspace® は、次の場合にはこのルールを報告しません。

  • 未使用のパラメーターの宣言。未使用の定義は、MISRA C:2012 Rule 2.3 に違反します。

  • void 関数の戻り値が未使用の場合。この関数は値を返す以外の二次的影響を伴う可能性があるためです。関数呼び出しを削除すると、プログラムの動作に影響する可能性があります。

  • キャスト演算子の結果がコード内で使用される場合。

トラブルシューティング

ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。

すべて展開する

extern volatile unsigned int v;
extern char *p;

void f ( void ) {
    unsigned int x;


    ( void ) v;      /* Compliant - Exception*/
    ( int ) v;       /* Non-compliant  */
    v >> 3;          /* Non-compliant  */

    x = 3;           /* Non-compliant  */

    *p++;            /* Non-compliant  */
    ( *p )++;        /* Compliant  */
}

この例では、ある変数に対し演算が実行され、その演算の結果が使用されていない場合、ルールに違反します。次に例を示します。

  • 変数 v に対する演算 (int)>> は、その結果が使用されていないため冗長です。

  • 演算 = は、ローカル変数 x が演算の後で読み取られないため冗長です。

  • p++ に対する演算 * は、その結果が使用されていないため冗長です。

次の場合、このルールに違反しません。

  • 変数が void にキャストされる。キャストにより、値の不使用が意図的であることが示されます。

  • 演算の結果が使用されている。たとえば、p に対する演算 * は、*p がインクリメントされるため冗長ではありません。

void g ( void ) {
               /* Compliant  */
}

void h ( void) {
     g( );     /* Non-compliant */
}

この例では、g は空の関数です。関数自体はルール違反ではありませんが、関数の呼び出しがルールに違反します。

チェック情報

グループ: 未使用コード
カテゴリ: 必要
AGC カテゴリ: 必要

バージョン履歴

R2014b で導入

すべて展開する


1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.

The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:

  • MISRA C:2004

  • MISRA C:2012

  • MISRA C:2023

  • MISRA C++:2008

  • MISRA C++:2023

MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.