C and C++


LANG.FUNCS.DEFAULT.OVERRIDE : メソッドのパラメータデフォルト値のミスマッチ

要旨

オーバライドしている仮想関数はデフォルトのパラメータ値を指定してしますが、 そのパラメータは基底クラスで異なるデフォルト値を有しています。

プロパティ

クラス名 Method Default Value Mismatch
日本語クラス名 メソッドのパラメータデフォルト値のミスマッチ
クラス分類 スタイル (style)
ニーモニック LANG.FUNCS.DEFAULT.OVERRIDE
カテゴリー
AUTOSARC++14 AUTOSARC++14:M8-3-1 Parameters in an overriding virtual function shall either use the same default arguments as the function they override, or else shall not specify any default arguments.
MisraC++2008 MisraC++2008:8-3-1 Parameters in an overriding virtual function shall either use the same default arguments as the function they override, or else shall not specify any default arguments.
MisraC++2023 MisraC++2023:13.3.2 Parameters in an overriding virtual function shall not introduce different default arguments
JSF++ JSF++:95 An inherited default parameter shall never be redefined.
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっており、プロジェクトには非正規の C向けAST が必要になります。有効にするにはプロジェクト設定ファイル (configuration file) に以下の WARNING_FILTER ルールと RETAIN_UNNORMALIZED_C_AST 設定を追加してください。
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Method Default Value Mismatch"
注:非正規化された AST を継続して使用した場合、使用ディスク容量が増加し解析時間が長くなる可能性があります。

class BaseClass {

  void f(int x=1) {}

  virtual void h1(int x)   {}
  virtual void h2(int x=1) {}
  virtual void h3(int x=1) {}
  virtual void h4(int x=1) {}
};


class DerivedClass : BaseClass {
  void g(int x=0) {}                  // ok: not overriding

  void f(int x=2) {}                  // ok: not virtual

  void h1(int x=1) {}                 // ok: no default specified in base class
  void h2(int x=1) {}                 // ok: same default as in base class
  void h3(int x)   {}                 // ok: does not specify a default
  void h4(int x=2) {}  // 'Method Default Value Mismatch' warning issued here
};

関連のある設定ファイルパラメータ

設定ファイルの以下のパラメータがこのワーニングクラスのチェックに影響します。