Klocwork チェッカーにマッピングされた MISRA C:2004 規則

ガイドライン カテゴリ チェッカー名および説明
Dir. 1.3 必要(Required)

Dir. 1.4 必要(Required)

Dir. 1.5 推奨(Advisory)

Dir. 2.4 推奨(Advisory)

Dir. 3.1 必要(Required)

Dir. 3.2 必要(Required)

Dir. 3.3 推奨(Advisory)

Dir. 3.5 必要(Required)

Dir. 3.6 必要(Required)

Dir. 18.3 (req.) 必要(Required)

Dir. 21.1 (req.) 必要(Required)

Rule 1.1 (req.) 必要(Required)

Rule 1.2 (req.) 必要(Required)

Rule 2.1 (req.) 必要(Required)

MISRA.ASM.ENCAPS   アセンブリ言語が分離されていません

Rule 2.2 (req.) 必要(Required)

MISRA.TOKEN.CPCOM   C++ スタイルのコメントです

Rule 2.3 (req.) 必要(Required)

MISRA.TOKEN.BADCOM   コメントに不適切な文字列があります

Rule 3.4 (req.) 必要(Required)

MISRA.PRAGMA   ドキュメントにない pragma ディレクティブです

Rule 4.1 (req.) 必要(Required)

MISRA.TOKEN.WRONGESC.C.2004   リテラルに不正なエスケープ文字列があります

Rule 4.2 (req.) 必要(Required)

MISRA.CHAR.TRIGRAPH   3 文字表記の使用

Rule 5.1 (req.) 必要(Required)

MISRA.DEFINE.LONGNAME   マクロ名が長すぎます

MISRA.IDENT.LONG   識別子が 32 文字以上です

Rule 5.2 (req.) 必要(Required)

MISRA.VAR.HIDDEN   内部のスコープで宣言された識別子によって外部のスコープの識別子が非表示になっています

Rule 5.3 (req.) 必要(Required)

MISRA.TYPEDEF.NOT_UNIQUE   Typedef 名がその他のエンティティ用に使用されています

Rule 5.4 (req.) 必要(Required)

MISRA.CT.UNIQUE.ID   識別子がタグ名と不整合です

Rule 5.5 (adv.) 推奨(Advisory)

MISRA.VAR.UNIQUE.STATIC   静的ストレージ指定の識別子がその他の識別子と不整合です

Rule 5.6 (adv.) 推奨(Advisory)

MISRA.TYPE.NAMECLASH.C.2004   ある名前空間の識別子が他の名前空間の識別子と同じスペルです

Rule 5.7 (adv.) 推奨(Advisory)

MISRA.VAR.UNIQUE   識別子がその他の識別子と不整合です

Rule 6.1 (req.) 必要(Required)

MISRA.CHAR.NOT_CHARACTER   文字でない値に 'char' が使用されています

Rule 6.2 (req.) 必要(Required)

MISRA.SIGNED_CHAR.NOT_NUMERIC   数値でない値に 'signed char' または 'unsigned char' が使用されています

Rule 6.3 (adv.) 推奨(Advisory)

MISRA.BUILTIN_NUMERIC   組み込み数値型が使用されています

Rule 6.4 (req.) 必要(Required)

MISRA.BITFIELD.TYPE   ビットフィールドのタイプは、符号付き/符号なし整数のいずれでもありません

Rule 6.5 (req.) 必要(Required)

MISRA.BITFIELD.SIGNED   名前付きの符号付きビットフィールドの長さが 2 未満です

MISRA.BITFIELD.SIGNED.UNNAMED   名前のない符号付きビットフィールドの長さが 2 未満です

Rule 7.1 (req.) 必要(Required)

MISRA.TOKEN.OCTAL.ESCAPE   8 進数のエスケープ文字列の使用

MISRA.TOKEN.OCTAL.INT   8 進数の整数定数を使用しています

Rule 8.1 (req.) 必要(Required)

MISRA.FUNC.NOPROT.CALL   関数が呼び出されていますが、プロトタイプがありません

MISRA.FUNC.NOPROT.DEF   関数は定義されていますが、プロトタイプがありません

Rule 8.11 (req.) 必要(Required)

MISRA.FUNC.STATIC.REDECL   関数またはオブジェクトの再宣言に 'static' 修飾子がありません

Rule 8.12 (req.) 必要(Required)

MISRA.DECL.ARRAY_SIZE   配列の宣言でサイズが不明です

Rule 8.2 (req.) 必要(Required)

MISRA.DECL.NO_TYPE   宣言から型が抜けています

Rule 8.3 (req.) 必要(Required)

MISRA.OBJ.TYPE.IDENT   型がその他の宣言の型と一致していません

Rule 8.4 (req.) 必要(Required)

MISRA.OBJ.TYPE.COMPAT   型がその他の宣言の型と互換性がありません

Rule 8.5 (req.) 必要(Required)

MISRA.ONEDEFRULE.FUNC   ヘッダーファイルでグローバル関数が定義されています

MISRA.ONEDEFRULE.VAR   ヘッダーファイルでグローバル変数が定義されています

Rule 8.6 (req.) 必要(Required)

MISRA.DECL.FUNC_LOCAL   関数がローカルで宣言されています

Rule 8.7 (req.) 必要(Required)

MISRA.VAR.MIN.VIS   名前の可視性が高すぎます

Rule 8.8 (req.) 必要(Required)

Rule 8.9 (req.) 必要(Required)

Rule 8.10 (req.) 必要(Required)

Rule 9.1 (req.) 必要(Required)

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   未初期化の変数

Rule 9.2 (req.) 必要(Required)

MISRA.INIT.BRACES   不適切な初期化子が配置を固定しています

Rule 9.3 (req.) 必要(Required)

MISRA.ENUM.INIT   1 番目以外の列挙子が明示的に初期化されていますが、一部の要素が明示的に初期化されていません

Rule 10.1 (req.) 必要(Required)

MISRA.CVALUE.IMPL.CAST   暗黙の型変換で符号、型サイズ、型の違いにより情報の損失を起こす記述があります。

Rule 10.2 (req.) 必要(Required)

MISRA.CVALUE.IMPL.CAST   暗黙の型変換で符号、型サイズ、型の違いにより情報の損失を起こす記述があります。

Rule 10.3 (req.) 必要(Required)

MISRA.CAST.INT   自明ではない整数式が広い型または別の符号を持つ型にキャストされています

Rule 10.4 (req.) 必要(Required)

MISRA.CAST.FLOAT   自明ではない浮動型の式が広いタイプにキャストされています

Rule 10.5 (req.) 必要(Required)

MISRA.CAST.UNSIGNED_BITS   unsigned char または short でのビット演算の結果は元の型にキャストできません

Rule 10.6 (req.) 必要(Required)

MISRA.LITERAL.UNSIGNED.SUFFIX   'U' 添え字の付かない符号なし整数リテラルです

Rule 11.1 (req.) 必要(Required)

MISRA.CAST.FUNC_PTR   関数ポインタと整数型以外の間のキャストです。

Rule 11.2 (req.) 必要(Required)

MISRA.CAST.PTR.UNRELATED   ポインタ型のオブジェクトを関連のない型にキャストしています

Rule 11.3 (adv.) 推奨(Advisory)

MISRA.CAST.PTR_TO_INT   ポインタと整数型間のキャスト

Rule 11.4 (adv.) 推奨(Advisory)

MISRA.CAST.PTR   オブジェクトタイプを指すポインタとオブジェクトタイプを指す別のポインタ間のキャストです

Rule 11.5 (req.) 必要(Required)

MISRA.CAST.CONST   キャスト演算により const または volatile がポインターまたは参照から除外されます。

Rule 12.1 (adv.) 推奨(Advisory)

MISRA.EXPR.PARENS.INSUFFICIENT   式の演算子優先規則に制限された依存性が必要です

MISRA.EXPR.PARENS.REDUNDANT   式の演算子優先規則に制限された依存性が必要です

Rule 12.10 (req.) 必要(Required)

MISRA.COMMA   カンマ演算子が使用されています

Rule 12.11 (adv.) 推奨(Advisory)

MISRA.COMP.WRAPAROUND   条件内でラップアラウンドしています

MISRA.ELIF.WRAPAROUND   #elif ディレクティブでラップアラウンドします

MISRA.IF.WRAPAROUND   #if ディレクティブでラップアラウンドします

NUM.OVERFLOW.DF   起こり得る数値のオーバーフローまたはラップアラウンド

Rule 12.12 (req.) 必要(Required)

MISRA.FLOAT.BIT.REPR   浮動小数点値のビット操作結果はストレージのレイアウトによって変わります

Rule 12.13 (adv.) 推奨(Advisory)

MISRA.INCR_DECR.OTHER   増分または減分の演算子がその他の演算子と混合して式で使用されています

Rule 12.2 (req.) 必要(Required)

PORTING.VAR.EFFECTS   ある使用法が副次的な影響を受ける式で変数が 2 回使用されています

Rule 12.3 (req.) 必要(Required)

MISRA.SIZEOF.SIDE_EFFECT   sizeof のオペランドに副作用があります

Rule 12.4 (req.) 必要(Required)

MISRA.LOGIC.SIDEEFF   論理 'and' 式または論理 'or' 式の右側のオペランドは副作用があります

MISRA.LOGIC.SIDEEFF.COND   条件式の分岐式に副作用があります

Rule 12.5 (req.) 必要(Required)

MISRA.LOGIC.PRIMARY   論理 'and' 式または論理 'or' 式のオペランドが 1 次式ではありません

Rule 12.6 (adv.) 推奨(Advisory)

MISRA.LOGIC.OPERAND.NOT_BOOL   論理演算のオペランドは実質的にはブール値ではありません

MISRA.LOGIC.OPERATOR.NOT_BOOL   論理演算ではない演算子のオペランドが実質的にはブール値です

Rule 12.7 (req.) 必要(Required)

MISRA.BITS.NOT_UNSIGNED   ビット演算のオペランドが符号なし整数ではありません

MISRA.BITS.NOT_UNSIGNED.PREP   ビット演算のオペランドが符号なし整数ではありません

Rule 12.8 (req.) 必要(Required)

MISRA.SHIFT.RANGE   シフト演算子の右側のオペランドは範囲外 (左側のオペランドの最大ビット長以上か、または負) です

Rule 12.9 (req.) 必要(Required)

MISRA.UMINUS.UNSIGNED   単項マイナス演算子が符号なしオペランドに対して使用されています。

Rule 13.1 (req.) 必要(Required)

MISRA.ASSIGN.COND   条件内で代入演算子が使用されています

Rule 13.2 (adv.) 推奨(Advisory)

MISRA.ZERO_EQ.IMPLICIT   非ブール式が暗黙的にゼロに対してテストされています

Rule 13.3 (req.) 必要(Required)

MISRA.FLOAT_EQUAL   浮動小数点式のイコールがテストされています

Rule 13.4 (req.) 必要(Required)

MISRA.FOR.COND.FLT   for ループの条件セクションで浮動小数点オブジェクトが使用されています

Rule 13.5 (req.) 必要(Required)

MISRA.FOR.COND   for ループの条件ではループカウンターの値が変わりません

MISRA.FOR.INCR.CHANGE   for ループの増分式がループカウンターで変化していません

Rule 13.6 (req.) 必要(Required)

MISRA.FOR.STMT.CHANGE   for ループのカウンターがループステートメント内で変更されています

Rule 13.7 (req.) 必要(Required)

INVARIANT_CONDITION.GEN   不変な条件式

INVARIANT_CONDITION.UNREACH   不変な条件式

Rule 14.1 (req.)

UNREACH.ENUM   enum が取りうる値が原因で、コードは到達不能になっています

UNREACH.GEN   到達不能コード

UNREACH.RETURN   到達不能な void return文

Rule 14.10 (req.) 必要(Required)

MISRA.IF.NO_ELSE   if/else-if ステートメントのチェインが else で終了していないか、または空の else 句で終了しています

Rule 14.2 (req.) 必要(Required)

MISRA.STMT.NO_EFFECT   そのステートメントは副作用がなく、制御フローを変更しません

Rule 14.3 (req.) 必要(Required)

MISRA.NULL.STMT   行上に NULL ステートメント以外のものがあるか、またはコメントが不適切な場所に記述されています

Rule 14.4 (req.) 必要(Required)

MISRA.GOTO   goto ステートメントが使用されています

Rule 14.5 (req.) 必要(Required)

MISRA.CONTINUE   continue ステートメントが使用されています

Rule 14.6 (req.) 必要(Required)

MISRA.ITER.ONETERM   反復ステートメントに複数の break または for ループ終端への複数の goto があります

Rule 14.7 (req.) 必要(Required)

MISRA.RETURN.NOT_LAST   関数内で return が最後のステートメントになっていません

Rule 14.8 (req.) 必要(Required)

MISRA.STMT.NO_COMPOUND   switch、while、do/while または for ステートメントのボディが複合ステートメントではありません

Rule 14.9 (req.) 必要(Required)

MISRA.IF.NO_COMPOUND   if/else ステートメントのボディが複合ステートメントではありません

Rule 14.1 (adv.) 推奨(Advisory)

Rule 15.1 (req.) 必要(Required)

MISRA.SWITCH.LABEL   switch のラベルが switch ボディ内の入れ子複合ステートメント内に置かれています

Rule 15.2 (req.) 必要(Required)

MISRA.SWITCH.NO_BREAK   switch 句の最後に break ステートメントまたは throw ステートメントがありません

Rule 15.3 (req.) 必要(Required)

MISRA.SWITCH.NODEFAULT   switch ステートメントの最後に default 句がありません

Rule 15.4 (req.) 必要(Required)

MISRA.SWITCH.BOOL   switch ステートメントの条件がブール式です

Rule 15.5 (req.) 必要(Required)

MISRA.SWITCH.NO_CASE   switch ステートメントに case 句がありません

Rule 15.0 (req.) 必要(Required)

Rule 16.1 (req.) 必要(Required)

MISRA.FUNC.VARARG   関数が可変数の引数を持っています

Rule 16.10 (req.) 必要(Required)

SV.RVT.RETVAL_NOTTESTED   戻り値の無視

Rule 16.2 (req.) 必要(Required)

MISRA.FUNC.RECUR   再帰関数

Rule 16.3 (req.) 必要(Required)

MISRA.FUNC.UNNAMED.PARAMS   関数の宣言に名前のないパラメーターがあります

Rule 16.4 (req.) 必要(Required)

MISRA.FUNC.PARAMS.IDENT   関数の宣言と定義で使用される識別子が一致していません

Rule 16.5 (req.) 必要(Required)

MISRA.FUNC.NO_PARAMS   パラメーターのない関数に void パラメータータイプがありません

Rule 16.6 (req.) 必要(Required)

MISRA.FUNC.UNMATCHED.PARAMS   関数に渡される仮引数と実際のパラメーターの数が一致しません

Rule 16.7 (adv.) 推奨(Advisory)

MISRA.PPARAM.NEEDS.CONST   ポインタパラメーターを使用しないでアドレスされたオブジェクトを変更していますが、const を指すポインタとして宣言されていません

Rule 16.8 (req.) 必要(Required)

FUNCRET.GEN   非 void 関数に戻り値がありません

FUNCRET.IMPLICIT   暗黙的に int を返す非 void 関数に戻り値がありません

Rule 16.9 (req.) 必要(Required)

MISRA.FUNC.ADDR   & 演算子なしで関数のアドレスが使用されています

Rule 17.1 (req.) 必要(Required)

MISRA.PTR.ARITH   代数式または配列インデックス式でポインタが使用されています

Rule 17.2 (req.) 必要(Required)

MISRA.PTR.SUB   ポインターの減算は、同じ配列を指している場合にのみ適用されます

MISRA.PTR.SUB.OBJECT   ポインターの減算は、同じオブジェクトを指している場合にのみ適用されます

Rule 17.3 (req.) 必要(Required)

MISRA.PTR.CMP.2008   比較演算子を使用したポインターの比較は、同じ配列を指していて、範囲内にある場合にのみ適用されます

MISRA.PTR.CMP.OBJECT.2008   比較演算子を使用したポインターの比較は、同じオブジェクトを指しており、範囲内である場合にのみ適用されます

Rule 17.4 (req.) 必要(Required)

MISRA.PTR.ARITH   代数式または配列インデックス式でポインタが使用されています

Rule 17.5 (adv.) 推奨(Advisory)

MISRA.PTR.TO_PTR_TO_PTR   ポインタ宣言に 2 つ以上のレベルの間接指定があります

Rule 17.6 (req.) 必要(Required)

LOCRET.ARG   関数がローカル変数のアドレスを返しています

LOCRET.GLOB   関数がローカル変数のアドレスを返しています

LOCRET.RET   関数がローカル変数のアドレスを返しています

Rule 18.1 (req.) 必要(Required)

MISRA.INCOMPLETE.STRUCT   不完全な構造タイプが使用されています

MISRA.INCOMPLETE.STRUCT.UNNAMED   名前のない不完全な構造タイプが使用されています

MISRA.INCOMPLETE.UNION   不完全な和集合タイプが使用されています

MISRA.INCOMPLETE.UNION.UNNAMED   名前のない不完全な和集合タイプが使用されています

Rule 18.2 (req.) 必要(Required)

MISRA.ASSIGN.OVERLAP   オブジェクトがオーバーラップするオブジェクトに割り当てられています

Rule 18.4 (req.) 必要(Required)

MISRA.UNION   和集合が使用されています

Rule 19.1 (adv.) 推奨(Advisory)

MISRA.INCL.INSIDE   include ディレクティブの前にプリプロセッサ出力トークンがあります

Rule 19.10 (req.) 必要(Required)

MISRA.DEFINE.NOPARS   マクロパラメーターに括弧がありません

Rule 19.11 (req.) 必要(Required)

MISRA.ELIF.UNDEF   #elif ディレクティブでマクロが定義されていません

MISRA.IF.UNDEF   #if ディレクティブでマクロが定義されていません

Rule 19.12 (req.) 必要(Required)

MISRA.DEFINE.SHARP.MANY   マクロ定義に # 演算子または ## 演算子がいくつか使用されています

Rule 19.13 (adv.) 推奨(Advisory)

MISRA.DEFINE.SHARP   マクロ定義に # 演算子または ## 演算子が使用されています

Rule 19.14 (req.) 必要(Required)

MISRA.ELIF.DEFINED   #elif ディレクティブで不正な 'defined' が使用されています

MISRA.IF.DEFINED   #if ディレクティブで不正な 'defined' が使用されています

Rule 19.15 (req.) 必要(Required)

MISRA.INCGUARD   インクルードガードが入力されていません

Rule 19.17 (req.) 必要(Required)

MISRA.ELIF.OTHERFILE   不適切なファイルでの #elif

MISRA.ELSE.OTHERFILE   不適切なファイルでの #else

MISRA.ENDIF.OTHERFILE   不適切なファイルでの #endif

Rule 19.2 (adv.) 推奨(Advisory)

MISRA.INCL.SYMS   ヘッダーファイル名に非標準文字が使用されています

Rule 19.3 (req.) 必要(Required)

MISRA.INCL.BAD   非標準の include ディレクティブです

Rule 19.4 (req.) 必要(Required)

MISRA.DEFINE.BADEXP   不適切なマクロ展開です

Rule 19.5 (req.) 必要(Required)

MISRA.DEFINE.NOTGLOBAL   グローバルレベル以外で定義されています

MISRA.UNDEF.NOTGLOBAL   グローバルレベル以外で定義されていません

Rule 19.6 (req.) 必要(Required)

MISRA.UNDEF   定義のない使用です

Rule 19.7 (adv.) 推奨(Advisory)

MISRA.DEFINE.FUNC   マクロが関数のように定義されています

Rule 19.8 (req.) 必要(Required)

MISRA.EXPANSION.NARGS   マクロの引数がありません

Rule 19.9 (req.) 必要(Required)

MISRA.EXPANSION.DIRECTIVE   マクロの引数内にディレクティブのようなトークンがあります

Rule 19.16 (req.) 必要(Required)

Rule 20.1 (req.) 必要(Required)

MISRA.DEFINE.WRONGNAME   標準ライブラリからの名前がマクロ名に使用されています

MISRA.DEFINE.WRONGNAME.UNDERSCORE   予約名がマクロ名に使用されています

MISRA.EXPANSION.UNSAFE   安全ではないマクロの使用

MISRA.INCL.UNSAFE   安全でないヘッダーのインクルード

Rule 20.10 (req.) 必要(Required)

MISRA.STDLIB.ATOI   ライブラリ stdlib.h から 'atof'、'atoi' または 'atol' が使用されています

Rule 20.11 (req.) 必要(Required)

MISRA.STDLIB.ABORT   ライブラリ stdlib.h から 'abort'、'exit'、'getenv' または 'system' が使用されています

Rule 20.12 (req.) 必要(Required)

MISRA.INCL.UNSAFE   安全でないヘッダーのインクルード

MISRA.STDLIB.TIME   ライブラリ time.h の時間処理関数の使用

Rule 20.2 (req.) 必要(Required)

MISRA.STDLIB.WRONGNAME   標準ライブラリのマクロ、オブジェクトまたは関数の名前が再使用されています

MISRA.STDLIB.WRONGNAME.UNDERSCORE   予約名が言語エンティティの名前に使用されています

MISRA.UNDEF.WRONGNAME   標準ライブラリからの名前が定義されていません

MISRA.UNDEF.WRONGNAME.UNDERSCORE   予約名が定義されていません

Rule 20.4 (req.) 必要(Required)

MISRA.STDLIB.MEMORY   動的ヒープメモリ割り当ての使用

Rule 20.5 (req.) 必要(Required)

MISRA.EXPANSION.UNSAFE   安全ではないマクロの使用

MISRA.STDLIB.ERRNO   エラーインジケーター 'errno' が使用されています

Rule 20.6 (req.) 必要(Required)

MISRA.EXPANSION.UNSAFE   安全ではないマクロの使用

Rule 20.7 (req.) 必要(Required)

MISRA.EXPANSION.UNSAFE   安全ではないマクロの使用

MISRA.STDLIB.LONGJMP   setjmp マクロまたは longjmp 関数の使用

Rule 20.8 (req.) 必要(Required)

MISRA.EXPANSION.UNSAFE   安全ではないマクロの使用

MISRA.INCL.UNSAFE   安全でないヘッダーのインクルード

MISRA.STDLIB.SIGNAL   signal.h の信号処理装置の使用

Rule 20.9 (req.) 必要(Required)

MISRA.INCL.UNSAFE   安全でないヘッダーのインクルード

MISRA.STDLIB.STDIO   プロダクションコードで入力/出力ライブラリ stdio.h が使用されています

Rule 20.3 (req.) 必要(Required)

サポートのサマリー

静的に検証不可能な規則の数: 142 個中の 11 個

サポートされている静的に検証可能な規則の数: 131 個中の 124 個

MISRA C:2004 のカバー率: 95% (静的に検証不可能な規則を除く)

"MISRA"、"MISRA C" および、"MISRA C++" は、The MISRA Consortium Limited の登録商標です。​