JavaScript is not currently enabled, but is required for full CodeSonar manual search and browse functionality.

If you are viewing this file in your hub's Web GUI, enable JavaScript in your browser: you will also need it for GUI functionality.

If you opened this file directly from disk, your browser may be directly suppressing JavaScript functionality: certain browsers perform this suppression on local files (but not files delivered by web servers) for security reasons.

CodeSonar® 9.2p0 CONFIDENTIAL CodeSecure Inc
C and C++


LANG.TYPE.BCVNID : 菱形継承階層構造外の仮想基底クラス

要旨

該当する基底クラスは仮想基底クラスとして宣言されますが、一般的な菱形(ダイヤモンド)継承階層構造における仮想基底クラスではありません。

このワーニングクラスは、 Virtual Base Classの厳格なスーパーセットとなります。

プロパティ

クラス名 Virtual Base Class not In Diamond
日本語クラス名 菱形継承階層構造外の仮想基底クラス
クラス分類 スタイル (style)
ニーモニック LANG.TYPE.BCVNID
カテゴリー
AUTOSARC++14 AUTOSARC++14:M10-1-1 Classes should not be derived from virtual bases.
  AUTOSARC++14:M10-1-2 A base class shall only be declared virtual if it is used in a diamond hierarchy.
MisraC++2008 MisraC++2008:10-1-1 Classes should not be derived from virtual bases.
  MisraC++2008:10-1-2 A base class shall only be declared virtual if it is used in a diamond hierarchy.
MisraC++2023 MisraC++2023:13.1.1 Classes should not be inherited virtually
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっており、プロジェクトには非正規の C向けAST が必要になります。有効にするにはプロジェクト設定ファイル (configuration file) に以下の WARNING_FILTER ルールと RETAIN_UNNORMALIZED_C_AST 設定を追加してください。
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Virtual Base Class not In Diamond"
注:非正規化された AST を継続して使用した場合、使用ディスク容量が増加し解析時間が長くなる可能性があります。

//        BaseA                  BaseB               BaseC  BaseD
//         / \                    |                   / \   /    
//        /   \                   |                  /   \ /     
//     Int1   Int2               Int3             Int4   Int5    
//        \   /                   |                  \   /       
//         \ /                    |                   \ /        
//      DerivedX               DerivedY             DerivedZ     

class BaseA {};
class BaseB {};
class BaseC {};
class BaseD {};

class Int1: public virtual BaseA {};                                   // ok:  within a diamond hierarchy
class Int2: public virtual BaseA {};                                   // ok:  within a diamond hierarchy
class Int3: public virtual BaseB {};                       // 'Virtual Base Class not In Diamond' warning issued here
class Int4: public virtual BaseC {};                                   // ok: within a diamond hierarchy
class Int5: public virtual BaseC, public virtual BaseD {}; // 'Virtual Base Class not In Diamond' warning issued here

class DerivedX: public Int1, public Int2 {};
class DerivedY: public Int3 {};
class DerivedZ: public Int4, public Int5 {};

もしVirtual Base Class の検出を有効化した場合、 Virtual Base Class のワーニングがサンプル内の それぞれの中間クラス宣言箇所 (Int1, Int2, Int3, Int4, Int5) で発行されます。

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

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

 

To report problems with this documentation, please visit https://support.codesecure.com/.