Klocwork の認証対象チェッカーにマッピングされた MISRA C++:2008 規則
ガイドライン | チェッカー名および説明 |
---|---|
0.0.1 |
UNREACH.ENUM enum が取りうる値が原因で、コードは到達不能になっています UNREACH.GEN 到達不能コード UNREACH.RETURN 到達不能な void return文 UNREACH.SIZEOF アーキテクチャに関連した到達不能コード |
0.0.2 |
INVARIANT_CONDITION.GEN 不変な条件式 INVARIANT_CONDITION.UNREACH 不変な条件式 |
0.1.1 |
VA_UNUSED.GEN 値を割り当て後に使用しません VA_UNUSED.INIT 値を初期化後に使用しません |
0.1.2 |
MISRA.FUNC.UNUSEDRET 非 void 関数の戻り値が使用されていません |
0.2.1 |
LV_UNUSED.GEN ローカル変数は使用されません |
0.2.2 |
MISRA.FUNC.UNUSEDPAR 非仮想関数の仮引数が使用されていません |
0.2.4 |
UNUSED.FUNC.GEN 関数を定義していますが、使用していません |
10.0.1 |
MISRA.DECL.MANY_DCLS 1 つの宣言に複数の宣言子があります |
10.1.1 |
MISRA.CONST.RET.NON_CONST 定数のメンバー関数が非定数のポインタをメンバー変数に返しています MISRA.PPARAM.NEEDS.CONST ポインタパラメーターを使用しないでアドレスされたオブジェクトを変更していますが、const を指すポインタとして宣言されていません MISRA.RET.REF.NON_CONST メンバー関数が非定数のハンドルをメンバー変数に返しています |
10.1.2 |
CERT.EXPR.VOLATILE.ADDR.PARAM 非 volatile ポインタを介して volatile オブジェクトを関数に渡さないでください |
10.3.1 |
MISRA.NAMESPACE.UNMD ヘッダーファイルに名前のない名前空間があります |
10.4.1 |
AUTOSAR.ASM asm 宣言は使用してはなりません |
11.3.1 |
AUTOSAR.ARRAY.CSTYLE C スタイルの配列は使用してはなりません |
11.3.2 |
MISRA.PTR.TO_PTR_TO_PTR ポインタ宣言に 2 つ以上のレベルの間接指定があります |
11.6.2 |
UNINIT.CTOR.MIGHT コンストラクタにおける未初期化の変数の可能性 UNINIT.CTOR.MUST コンストラクタにおける未初期化の変数 UNINIT.HEAP.MIGHT 未初期化のヒープの使用の可能性 UNINIT.HEAP.MUST 未初期化のヒープの使用 UNINIT.STACK.ARRAY.MIGHT 未初期化の配列の可能性 UNINIT.STACK.ARRAY.MUST 未初期化の配列 UNINIT.STACK.ARRAY.PARTIAL.MUST 一部が未初期化の配列 UNINIT.STACK.MIGHT 未初期化の変数の可能性 UNINIT.STACK.MUST 未初期化の変数 |
11.6.3 |
MISRA.ENUM.IMPLICIT.VAL.NON_UNIQUE.2012 暗黙的列挙子値は一意ではありません |
12.2.3 |
MISRA.BITFIELD.SIGNED 名前付きの符号付きビットフィールドの長さが 2 未満です |
12.3.1 |
MISRA.UNION 和集合が使用されています |
13.1.1 |
MISRA.DERIVE.VIRTUAL クラスが仮想基本クラスから派生しています |
13.1.2 |
MISRA.BASE.VIRTUAL.NOTVIRTUAL 基本クラスが継承階層で仮想および非仮想の両方で使用されています |
13.3.1 |
AUTOSAR.MEMB.VIRTUAL.SPEC 仮想関数宣言には 3 つの指定子 (1) virtual、(2) override、(3) final の内の 1 つのみが含まれていなければなりません |
13.3.3 |
MISRA.FUNC.PARAMS.IDENT 関数の宣言と定義で使用される識別子が一致していません |
13.3.4 |
AUTOSAR.VIRTUAL.PTR_COMPARE メンバー仮想関数を指すポインターのテストは、null ポインター定数との等価を確認する目的でのみ行う必要があります |
15.1.1 |
MISRA.CTOR.DYNAMIC オブジェクトの動的タイプがそのコンストラクタのボディから使用されています MISRA.DTOR.DYNAMIC オブジェクトの動的タイプがそのデストラクタのボディから使用されています |
15.1.2 |
MISRA.CTOR.BASE コンストラクタがその基本クラスのコンストラクタを明示的に呼び出していません |
15.1.3 |
MISRA.CTOR.NOT_EXPLICIT 組み込み型の引数を持つコンストラクタが '明示的に' 宣言されていません |
15.8.1 |
CL.SELF-ASSIGN 解放済みメモリの使用 (二重解放) - operator= |
16.5.2 |
MISRA.UN_OP.OVERLOAD 単項の & 演算子が多重定義されています |
17.8.1 |
MISRA.FUNC.SPEC.OVRLD 関数呼び出し用の実行可能関数に多重定義されたテンプレートとその明示的な特殊化が含まれています |
18.1.1 |
MISRA.THROW.PTR 例外オブジェクトがポインタになっています |
18.1.2 |
MISRA.THROW.EMPTY 空のスロー式が catch ブロックに属していません |
18.3.1 |
MISRA.CATCH.ALL try-catch ブロックに省略記号例外ハンドラーがありません |
18.3.2 |
MISRA.CATCH.BY_VALUE クラス タイプの例外オブジェクトが値によってキャッチされています |
18.3.3 |
MISRA.CTOR.TRY.NON_STATIC コンストラクタまたはデストラクタの関数 try-catch ブロックが非スタティックなメンバーを参照しています |
18.5.1 |
AUTOSAR.EXCPT.NOEXCPT_THROW 関数を noexcept、noexcept(true)、または noexcept(<true condition>) と宣言する場合、その関数は例外を送出して終了してはなりません |
18.5.2 |
MISRA.TERMINATE terminate() 関数が明示的に呼び出されています |
19.0.1 |
MISRA.USE.UNKNOWNDIR 不明なプリプロセッサディレクティブが使用されています |
19.0.2 |
MISRA.DEFINE.FUNC マクロが関数のように定義されています |
19.0.3 |
MISRA.INCL.INSIDE include ディレクティブの前にプリプロセッサ出力トークンがあります |
19.1.1 |
MISRA.ELIF.DEFINED #elif ディレクティブで不正な 'defined' が使用されています MISRA.IF.DEFINED #if ディレクティブで不正な 'defined' が使用されています |
19.1.2 |
MISRA.ELIF.OTHERFILE 不適切なファイルでの #elif MISRA.ELSE.OTHERFILE 不適切なファイルでの #else MISRA.ENDIF.OTHERFILE 不適切なファイルでの #endif |
19.1.3 |
MISRA.ELIF.UNDEF #elif ディレクティブでマクロが定義されていません MISRA.IF.UNDEF #if ディレクティブでマクロが定義されていません |
19.2.1 |
MISRA.INCGUARD インクルードガードが入力されていません |
19.2.2 |
MISRA.INCL.BAD 非標準の include ディレクティブです |
19.2.3 |
MISRA.INCL.SYMS ヘッダーファイル名に非標準文字が使用されています |
19.3.1 |
MISRA.DEFINE.SHARP マクロ定義に # 演算子または ## 演算子が使用されています |
19.3.2 |
MISRA.DEFINE.SHARP.ORDER.2012 複数の '#' または '##' の評価の順番が指定されていません |
19.3.3 |
MISRA.DEFINE.SHARP.REPLACE.2012 それ自身さらなるマクロ置換の影響を受ける、'#' または '##' 演算子のオペランドとして使用されるマクロパラメーターは、これらの演算子のオペランドとしてのみ使用される。 |
19.3.4 |
MISRA.DEFINE.NOPARS マクロパラメーターに括弧がありません |
19.3.5 |
MISRA.EXPANSION.DIRECTIVE マクロの引数内にディレクティブのようなトークンがあります |
19.6.1 |
MISRA.PRAGMA.ASM 不正なアセンブラ命令です PORTING.PRAGMA.ALIGN #pragma align の使用法 PORTING.PRAGMA.PACK #pragma pack の使用法 |
21.10.1 |
MISRA.FUNC.VARARG 関数が可変数の引数を持っています |
21.10.2 |
MISRA.STDLIB.LONGJMP setjmp マクロまたは longjmp 関数の使用 |
21.10.3 |
MISRA.STDLIB.SIGNAL signal.h の信号処理装置の使用 |
21.2.1 |
MISRA.STDLIB.ATOI ライブラリ stdlib.h から 'atof'、'atoi' または 'atol' が使用されています |
21.2.2 |
MISRA.STDLIB.CSTRING 'cstring' ライブラリからの関数が使用されています |
21.2.3 |
MISRA.STDLIB.SYSTEM.2012_AMD2 ライブラリ stdlib.h からの 'system' の使用 |
21.6.1 |
MISRA.STDLIB.MEMORY 動的ヒープメモリ割り当ての使用 |
21.6.2 |
MISRA.STDLIB.MEMORY 動的ヒープメモリ割り当ての使用 |
21.6.4 |
AUTOSAR.OP.DELETE.MISSING_VERSION プロジェクトにサイズ指定付きまたはサイズ指定なしの演算子 "delete" がグローバルに定義されている場合は、サイズ指定付きとサイズ指定なしの両方を定義する必要があります |
21.6.5 |
CERT.EXPR.DELETE_PTR.INCOMPLETE_TYPE 不完全な型へのポインターを削除しないでください |
25.5.1 |
AUTOSAR.SETLOCALE ライブラリ <clocale> (locale.h) と setlocale 関数は使用してはなりません |
25.5.2 |
CXX.STDLIB.ILLEGAL_WRITE 標準ライブラリ関数 localeconv、getenv、setlocale、または strerror が返すポインターは、必ずそれらが const-qualified 型を指すポインターを持つかのように使用する必要があります。 |
25.5.3 |
CXX.STDLIB.ILLEGAL_REUSE 標準ライブラリ関数 asctime または同様の関数によって返されるポインタは、同じ関数の後続の呼び出しに続いては使用しません |
26.3.1 |
AUTOSAR.VECTOR.BOOL std::vector<bool> の特殊化は使用してはなりません |
28.6.1 |
AUTOSAR.STDLIB.MOVE.CONST const または const& と宣言されたオブジェクトで std::move を使用してはなりません |
28.6.2 |
AUTOSAR.FORWARD 他の関数への値の転送は、(1) std::move (値が r 値参照の場合) か (2) std::forward (値が前方参照の場合) を使用して行う必要があります |
30.0.1 |
MISRA.STDLIB.STDIO プロダクションコードで入力/出力ライブラリ stdio.h が使用されています |
4.1.2 |
MISRA.TOKEN.OCTAL.ESCAPE 8 進数のエスケープ文字列の使用 MISRA.TOKEN.OCTAL.INT 8 進数の整数定数を使用しています |
4.1.3 |
MISRA.ADDR.REF.PARAM 関数が参照渡しパラメーターへの参照を返しています MISRA.ADDR.REF.PARAM.PTR 関数が参照渡しパラメーターのアドレスを返しています MISRA.CONV.FLOAT 暗黙的な浮動小数点変換です MISRA.DECL.EXCPT.SPEC 異なる例外指定で関数が宣言されています MISRA.DEFINE.WRONGNAME 標準ライブラリからの名前がマクロ名に使用されています MISRA.DEFINE.WRONGNAME.UNDERSCORE 予約名がマクロ名に使用されています MISRA.INCL.UNSAFE 安全でないヘッダーのインクルード MISRA.SPEC.SAMEFILE テンプレート特殊化とその基本テンプレートが別々のファイルで宣言されています MISRA.STDLIB.CSTRING.MACRO 'cstring' ライブラリからのマクロが使用されています MISRA.TOKEN.WRONGESC リテラルに不正なエスケープ文字列があります |
5.0.1 |
MISRA.CHAR.TRIGRAPH 3 文字表記の使用 |
5.13.3 |
MISRA.TOKEN.OCTAL.INT 8 進数の整数定数を使用しています |
5.13.4 |
MISRA.LITERAL.UNSIGNED.SUFFIX 'U' 添え字の付かない符号なし整数リテラルです |
5.13.7 |
MISRA.STRINGS.CONCAT 狭い文字列リテラルと広い文字列リテラルが連結されています |
5.7.1 |
MISRA.TOKEN.BADCOM コメントに不適切な文字列があります |
6.0.1 |
MISRA.DECL.FUNC_LOCAL 関数がローカルで宣言されています |
6.0.2 |
MISRA.DECL.ARRAY_SIZE 配列の宣言でサイズが不明です |
6.0.3 |
MISRA.NS.GLOBAL グローバル名前空間で関数、変数、または型が宣言されています MISRA.NS.GLOBAL.USING グローバル名前空間でのディレクティブまたは宣言の使用 |
6.0.4 |
MISRA.NS.MAIN 'main' の名前の付いた非グローバル関数が定義されています |
6.2.2 |
MISRA.OBJ.TYPE.COMPAT 型がその他の宣言の型と互換性がありません |
6.2.4 |
MISRA.ONEDEFRULE.FUNC ヘッダーファイルでグローバル関数が定義されています MISRA.ONEDEFRULE.VAR ヘッダーファイルでグローバル変数が定義されています |
6.4.1 |
MISRA.VAR.HIDDEN 内部のスコープで宣言された識別子によって外部のスコープの識別子が非表示になっています |
6.4.2 |
MISRA.BASE.IDS.UNIQUE 継承階層でメンバー名が 2 回使用されています |
6.4.3 |
MISRA.TEMPLMEM.NOQUAL インスタンス化されたテンプレートで、依存基本クラスで宣言されたメンバーが修飾子または 'this' なしで使用されています |
6.5.1 |
MISRA.LINKAGE.EXTERN 外部リンクを持つオブジェクトまたは関数の宣言がヘッダーファイルにありません |
6.8.1 |
LOCRET.RET 関数がローカル変数のアドレスを返しています UFM.DEREF.MUST 解放済みメモリの逆参照 UFM.FFM.MIGHT 解放済みメモリの使用 (二重解放)の可能性 UFM.FFM.MUST 解放済みメモリの解放 UFM.RETURN.MIGHT 解放済みメモリの戻り値への使用の可能性 UFM.RETURN.MUST 解放済みメモリの戻り値への使用 UFM.USE.MIGHT 解放済みメモリの使用の可能性 UFM.USE.MUST 解放済みメモリの使用 |
6.8.2 |
LOCRET.RET 関数がローカル変数のアドレスを返しています |
6.8.3 |
LOCRET.ARG 関数がローカル変数のアドレスを返しています LOCRET.GLOB 関数がローカル変数のアドレスを返しています |
6.9.1 |
MISRA.OBJ.TYPE.IDENT 型がその他の宣言の型と一致していません |
6.9.2 |
MISRA.BUILTIN_NUMERIC 組み込み数値型が使用されています |
7.0.1 |
CXX.BITOP.BOOL_OPERAND 潜在的な論理エラー: ブール式をビット演算子の引数として直接使用してはなりません。代わりに論理演算子の使用を検討してください。 MISRA.LOGIC.OPERATOR.NOT_BOOL 論理演算ではない演算子のオペランドが実質的にはブール値です |
7.0.2 |
PORTING.CMPSPEC.TYPE.BOOL 'bool' 型への割り当てが 1 バイトより大きくなっています |
7.0.3 |
MISRA.CHAR.NOT_CHARACTER 文字でない値に 'char' が使用されています |
7.0.4 |
MISRA.BITS.NOT_UNSIGNED ビット演算のオペランドが符号なし整数ではありません MISRA.BITS.NOT_UNSIGNED.PREP ビット演算のオペランドが符号なし整数ではありません MISRA.BITS.OPERAND ビット演算のオペランドが別の基底型を持っています MISRA.SHIFT.RANGE シフト演算子の右側のオペランドは範囲外 (左側のオペランドの最大ビット長以上か、または負) です |
7.0.5 |
MISRA.CAST.FLOAT_INT 整数型への浮動小数点式のキャスト MISRA.CAST.INT.SIGN 自明ではない複合式が別の符号を持つ型にキャストされています MISRA.CAST.INT_FLOAT 浮動小数点タイプへの複合式のキャスト MISRA.CONV.INT.SIGN 暗黙的な整数変換により符号が変わります |
7.0.6 |
MISRA.CHAR.OPERAND 型 'char' または 'wchar_t' の式が文字以外のオペランドで使用されています MISRA.ENUM.OPERAND 列挙型の式が代数コンテキストで使用されています |
7.11.1 |
MISRA.LITERAL.NULL.INT NULL が整数値として使用されています MISRA.LITERAL.NULL.PTR リテラルのゼロが NULLポインタ定数として使用されています |
7.11.2 |
MISRA.FUNC.ARRAY.PARAMS 配列タイプの関数引数がポインタに減退しています |
7.11.3 |
MISRA.CAST.FUNC_PTR.CPP キャストにより関数ポインタがその他のポインタ型に変換されます MISRA.CAST.INT_TO_PTR 整数型または void を指すポインタを持つオブジェクトがポインタ型にキャストされています MISRA.CAST.PTR.UNRELATED ポインタ型のオブジェクトを関連のない型にキャストしています |
8.0.1 |
MISRA.DEFINE.NOPARS マクロパラメーターに括弧がありません MISRA.EXPR.PARENS.REDUNDANT 式の演算子優先規則に制限された依存性が必要です MISRA.LOGIC.POSTFIX 論理 'and' 式または論理 'or' 式のオペランドが後置式ではありません |
8.1.2 |
AUTOSAR.LAMBDA.IMPLICIT_CAPTURE 変数はラムダ式で暗黙的にキャプチャしてはなりません |
8.14.1 |
MISRA.LOGIC.SIDEEFF 論理 'and' 式または論理 'or' 式の右側のオペランドは副作用があります |
8.18.1 |
MISRA.ASSIGN.OVERLAP オブジェクトがオーバーラップするオブジェクトに割り当てられています |
8.18.2 |
MISRA.ASSIGN.COND 条件内で代入演算子が使用されています MISRA.ASSIGN.SUBEXPR 代入演算子は条件外の部分式に使用されています |
8.19.1 |
MISRA.COMMA カンマ演算子が使用されています |
8.2.1 |
MISRA.CAST.PTR.VRCLASS 仮想基本クラスを指すポインタから派生クラスを指すポインタへのキャストにおいて、'dynamic_cast' を用いていません |
8.2.10 |
MISRA.FUNC.RECUR 再帰関数 |
8.2.2 |
MISRA.C_CAST 非 void タイプへの C スタイルのキャストです MISRA.FUNC_CAST 関数表記が明示的なコンストラクタ呼び出しとは異なるものにキャストされています |
8.2.3 |
MISRA.CAST.CONST キャスト演算により const または volatile がポインターまたは参照から除外されます。 |
8.2.4 |
MISRA.CAST.FUNC_PTR.CPP キャストにより関数ポインタがその他のポインタ型に変換されます |
8.2.5 |
AUTOSAR.CAST.REINTERPRET reinterpret_cast は使用してはなりません |
8.2.6 |
MISRA.CAST.INT_TO_PTR 整数型または void を指すポインタを持つオブジェクトがポインタ型にキャストされています |
8.2.7 |
MISRA.CAST.PTR_TO_INT ポインタと整数型間のキャスト |
8.20.1 |
MISRA.COMP.WRAPAROUND 条件内でラップアラウンドしています MISRA.ELIF.WRAPAROUND #elif ディレクティブでラップアラウンドします MISRA.IF.WRAPAROUND #if ディレクティブでラップアラウンドします NUM.OVERFLOW.DF 起こり得る数値のオーバーフローまたはラップアラウンド |
8.3.1 |
MISRA.UMINUS.UNSIGNED 単項マイナス演算子が符号なしオペランドに対して使用されています。 |
8.7.1 |
MISRA.PTR.ARITH 代数式または配列インデックス式でポインタが使用されています MISRA.PTR.ARITH.NOT_SAME.2008 ポインターオペランドの計算から得られるポインターは、そのポインターオペランドと同じ配列の要素をアドレス指定します |
8.7.2 |
MISRA.PTR.SUB ポインターの減算は、同じ配列を指している場合にのみ適用されます MISRA.PTR.SUB.OBJECT ポインターの減算は、同じオブジェクトを指している場合にのみ適用されます |
8.9.1 |
MISRA.PTR.CMP.2008 比較演算子を使用したポインターの比較は、同じ配列を指していて、範囲内にある場合にのみ適用されます MISRA.PTR.CMP.OBJECT.2008 比較演算子を使用したポインターの比較は、同じオブジェクトを指しており、範囲内である場合にのみ適用されます |
9.3.1 |
MISRA.IF.NO_COMPOUND if/else ステートメントのボディが複合ステートメントではありません MISRA.STMT.NO_COMPOUND switch、while、do/while または for ステートメントのボディが複合ステートメントではありません |
9.4.1 |
MISRA.IF.NO_ELSE if/else-if ステートメントのチェインが else で終了していないか、または空の else 句で終了しています |
9.4.2 |
MISRA.SWITCH.BOOL switch ステートメントの条件がブール式です MISRA.SWITCH.LABEL switch のラベルが switch ボディ内の入れ子複合ステートメント内に置かれています MISRA.SWITCH.NOT_WELL_FORMED switch ステートメントの形式が不適切です MISRA.SWITCH.NO_CASE switch ステートメントに case 句がありません |
9.5.1 |
MISRA.FOR.COND.CHANGE for ループのカウンターがループ条件セクション内で変更されています MISRA.FOR.COUNTER.FLT for ループのカウンターが浮動小数点タイプです MISRA.FOR.COUNTER.MANY for ループのカウンターが多すぎます MISRA.FOR.INCR for ループのカウンターが不適切な方法で変更されています MISRA.FOR.STMT.CHANGE for ループのカウンターがループステートメント内で変更されています |
9.6.1 |
AUTOSAR.GOTO goto ステートメントは使用してはなりません |
9.6.2 |
MISRA.GOTO.NESTED 入れ子複合ステートメント内で宣言されたラベルに goto しています |
9.6.3 |
MISRA.GOTO.AFTER.LABEL goto が制約なしで使用されています |
9.6.5 |
FUNCRET.GEN 非 void 関数に戻り値がありません RETVOID.GEN 非 void 関数が void 値を返しています |
0-1-4 |
未サポート - サポートの予定は現在ありません |
0-1-5 |
未サポート - サポートの予定は現在ありません |
0-1-6 |
未サポート - サポートの予定は現在ありません |
0-1-8 |
未サポート - サポートの予定は現在ありません |
0-3-1 |
未サポート - 静的に検証できません |
0-3-2 |
未サポート - サポートの予定は現在ありません |
0-4-1 |
未サポート - 静的に検証できません |
0-4-2 |
未サポート - 静的に検証できません |
0-4-3 |
未サポート - 静的に検証できません |
1-0-1 |
未サポート - サポートの予定は現在ありません |
1-0-2 |
未サポート - 静的に検証できません |
1-0-3 |
未サポート - 静的に検証できません |
2-2-1 |
未サポート - 静的に検証できません |
2-7-2 |
未サポート - サポートの予定は現在ありません |
2-7-3 |
未サポート - サポートの予定は現在ありません |
2-10-1 |
未サポート - サポートの予定は現在ありません |
3-2-2 |
未サポート - サポートの予定は現在ありません |
3-2-3 |
未サポート - サポートの予定は現在ありません |
3-2-4 |
未サポート - サポートの予定は現在ありません |
5-0-16 |
未サポート - サポートの予定は現在ありません |
5-0-17 |
未サポート - サポートの予定は現在ありません |
5-0-18 |
未サポート - サポートの予定は現在ありません |
5-17-1 |
未サポート - 静的に検証できません |
7-2-1 |
未サポート - サポートの予定は現在ありません |
7-4-1 |
未サポート - 静的に検証できません |
9-6-1 |
未サポート - 静的に検証できません |
12-8-1 |
未サポート - サポートの予定は現在ありません |
14-7-1 |
未サポート - サポートの予定は現在ありません |
15-0-1 |
未サポート - 静的に検証できません |
15-1-1 |
未サポート - サポートの予定は現在ありません |
15-3-1 |
未サポート - サポートの予定は現在ありません |
15-3-4 |
未サポート - サポートの予定は現在ありません |
15-5-2 |
未サポート - サポートの予定は現在ありません |
17-0-4 |
未サポート - 静的に検証できません |
サポートのサマリー
サポート対象合計: 193
静的に検証不可能な規則の合計: 14
サポートされていない静的に検証可能な規則の合計: 22
MISRA C++ の対象範囲: 90% (静的に検証不可能な規則を除く)
"MISRA"、"MISRA C" および、"MISRA C++" は、The MISRA Consortium Limited の登録商標です。