メインコンテンツ

MISRA C++:2008 Rule 0-1-12

There shall be no unused parameters (named or unnamed) in the set of parameters for a virtual function and all the functions that override it.

説明

ルール定義

There shall be no unused parameters (named or unnamed) in the set of parameters for a virtual function and all the functions that override it. 1

根拠

未使用のパラメーターは多くの場合、後から設計を変更したことを示します。おそらく、特定のパラメーターの使用をすべて削除したが、パラメーター リストからそのパラメーターを削除し忘れているのです。

未使用のパラメーターは不要なオーバーヘッドになります。誤って異なる数の引数を指定して関数を呼び出し、パラメーターの不一致を引き起こす可能性もあります。

Polyspace 実装

バーチャル関数ごとに、チェッカーは関数のすべてのオーバーライドを検査します。使用されていない名前付きパラメーターがオーバーライドに含まれている場合は、チェッカーが元のバーチャル関数に対する違反を表示して、オーバーライドを補助的なイベントとして一覧表示します。

Polyspace では、単一の翻訳単位内でバーチャル関数の未使用パラメーターがチェックされることに注意してください。たとえば、基底クラスに未使用のパラメーターをもつバーチャル メソッドが含まれているが、そのメソッドの派生クラスの実装でそのパラメーターが使用されている場合、ルール違反になりません。しかし、基底クラスと派生クラスが別々のファイルで定義されている場合、チェッカーはファイルごとに動作するため、基底クラスではこのルールの違反にフラグが設定されます。

チェッカーは、本体が空の関数内の未使用パラメーターにはフラグを設定しません。

レポート内の追加のメッセージ

There shall be no unused parameters (named or unnamed) in the set of parameters for a virtual function and all the functions that override it.

Function funcName has unused parameters.

トラブルシューティング

ルール違反が想定されるものの、Polyspace® から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。

すべて展開する

class base {
    public:
       virtual void assignVal (int arg1, int arg2) = 0; //Noncompliant
       virtual void assignAnotherVal (int arg1, int arg2) = 0;
};

class derived1: public base {
    public:
       virtual void assignVal (int arg1, int arg2) {
           arg1 = 0;
       }
       virtual void assignAnotherVal (int arg1, int arg2) {
           arg1 = 1;
       }
};

class derived2: public base {
    public:
       virtual void assignVal (int arg1, int arg2) {
           arg1 = 0;
       }
       virtual void assignAnotherVal (int arg1, int arg2) {
           arg2 = 1;
       }
};

この例では、バーチャル メソッド assignVal の 2 つ目のパラメーターは、このメソッドの派生クラスの実装でまったく使用されていません。

一方、派生クラス derived1 のバーチャル メソッド assignAnotherVal の実装では、このメソッドの最初のパラメーターが使用されています。derived2 の実装では、2 つ目のパラメーターが使用されています。assignAnotherVal の両方のパラメーターが使用されているため、このバーチャル メソッドはルールに違反しません。

チェック情報

グループ: Language Independent Issues
カテゴリ: 必要

バージョン履歴

R2016b で導入


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.