Klocwork C++ チェッカーにマッピングされた次世代主力戦闘機 C++ ID
以下の表では、次世代主力戦闘機 C++ コーディング基準を Klocwork C++ チェッカーにマッピングしています。Lockheed Martin 社が開発した次世代主力戦闘機 C++ コーディング基準は、プログラマーがセーフティクリティカルシステム用にエラーのないコードを開発するために役立ちます。
ガイドライン | チェッカー名および説明 |
---|---|
11 |
MISRA.CHAR.TRIGRAPH 3 文字表記の使用 |
12 |
MISRA.CHAR.DIGRAPH 2 文字表記の使用 |
13 |
AUTOSAR.TYPE.WCHAR_T wchar_t 型は使用してはなりません |
14 |
MISRA.LITERAL.SUFFIX.CASE リテラルの添え字は小文字です |
17 |
MISRA.STDLIB.ERRNO エラーインジケーター 'errno' が使用されています |
18 |
MISRA.EXPANSION.UNSAFE 安全ではないマクロの使用 |
19 |
AUTOSAR.SETLOCALE ライブラリ <clocale> (locale.h) と setlocale 関数は使用してはなりません |
20 |
MISRA.STDLIB.LONGJMP setjmp マクロまたは longjmp 関数の使用 |
21 |
MISRA.STDLIB.SIGNAL signal.h の信号処理装置の使用 |
22 |
MISRA.STDLIB.STDIO プロダクションコードで入力/出力ライブラリ stdio.h が使用されています |
23 |
MISRA.STDLIB.ATOI ライブラリ stdlib.h から 'atof'、'atoi' または 'atol' が使用されています |
24 |
MISRA.STDLIB.ABORT ライブラリ stdlib.h から 'abort'、'exit'、'getenv' または 'system' が使用されています |
25 |
MISRA.STDLIB.TIME ライブラリ time.h の時間処理関数の使用 |
26 |
MISRA.ELIF.COND.NOT_BOOL.2012 #elif 条件が 0 または 1 ではありません MISRA.ELIF.DEFINED #elif ディレクティブで不正な 'defined' が使用されています MISRA.ELIF.UNDEF #elif ディレクティブでマクロが定義されていません MISRA.ELIF.WRAPAROUND #elif ディレクティブでラップアラウンドします MISRA.EXPANSION.DIRECTIVE マクロの引数内にディレクティブのようなトークンがあります MISRA.IF.COND.NOT_BOOL.2012 #if 条件が 0 または 1 ではありません MISRA.IF.DEFINED #if ディレクティブで不正な 'defined' が使用されています MISRA.IF.UNDEF #if ディレクティブでマクロが定義されていません MISRA.IF.WRAPAROUND #if ディレクティブでラップアラウンドします MISRA.UNDEF 定義のない使用です MISRA.USE.EXPANSION マクロの展開 MISRA.USE.UNKNOWNDIR 不明なプリプロセッサディレクティブが使用されています MISRA.USE.WRONGDIR 不適切なプリプロセッサディレクティブです |
27 |
MISRA.INCGUARD インクルードガードが入力されていません MISRA.USE.DEFINE マクロが保護されずに定義されています |
28 |
MISRA.USE.DEFINE マクロが保護されずに定義されています |
29 |
MISRA.DEFINE.FUNC マクロが関数のように定義されています |
30 |
MISRA.DEFINE.BADEXP.CPP C++ ソースで不適切なマクロ展開です |
31 |
MISRA.USE.DEFINE マクロが保護されずに定義されています |
32 |
MISRA.USE.DEFINE マクロが保護されずに定義されています |
33 |
MISRA.INCL.BAD 非標準の include ディレクティブです |
35 |
MISRA.INCGUARD インクルードガードが入力されていません |
36 | |
37 | |
39 |
MISRA.ONEDEFRULE.FUNC ヘッダーファイルでグローバル関数が定義されています MISRA.ONEDEFRULE.VAR ヘッダーファイルでグローバル変数が定義されています |
40 |
CWARN.INCL.NO_INTERFACE ソースファイルにインターフェイスヘッダーが含まれていません |
42 |
AUTOSAR.STYLE.SINGLE_STMT_PER_LINE 各式ステートメントと識別子宣言は、個別の行に配置する必要があります |
46 |
MISRA.DEFINE.NOT_DISTINCT.C99.2012 識別子名が長すぎます |
53.1 |
MISRA.INCL.SYMS ヘッダーファイル名に非標準文字が使用されています |
57 |
JSF.ORDER.ACCESS_SPEC クラスの public、protected、および private セクションは、この順に宣言する必要があります |
59 |
MISRA.IF.NO_COMPOUND if/else ステートメントのボディが複合ステートメントではありません |
67 |
MISRA.MEMB.NOT_PRIVATE 非 POD クラスのメンバー変数がプライベートではありません |
69 |
MISRA.MEMB.NON_CONST 非定数のメンバー関数はどのメンバー変数も変更しません |
70 |
AUTOSAR.FRIEND_DECL フレンド宣言は使用してはなりません |
70.1 |
AUTOSAR.DTOR.NON_VIRTUAL クラスのパブリックデストラクタが非仮想的である場合、そのクラスは final と宣言する必要があります |
71 |
UNINIT.CTOR.MIGHT コンストラクタにおける未初期化の変数の可能性 |
71.1 |
MISRA.CTOR.DYNAMIC オブジェクトの動的タイプがそのコンストラクタのボディから使用されています |
74 |
AUTOSAR.CTOR.NSDMI_INIT_LIST コンストラクタ内の NSDMI と非静的メンバー初期化子の両方を同じ型で使用してはなりません |
75 |
CWARN.MEMBER.INIT.ORDER 初期化リストのメンバーが、クラスで宣言された順序でリストされません |
76 |
CL.FFM.ASSIGN 解放済みメモリの使用 (二重解放) - operator= が無いため CL.FFM.COPY 解放済みメモリの使用 (二重解放) - コピーコンストラクタが無いため CL.SHALLOW.ASSIGN 解放済みメモリの使用 (二重解放) - 演算子 = での浅いコピー CL.SHALLOW.COPY 解放済みメモリの使用 (二重解放) - コピーコンストラクタでの浅いコピー |
77 |
MISRA.CTOR.BASE コンストラクタがその基本クラスのコンストラクタを明示的に呼び出していません UNINIT.CTOR.MIGHT コンストラクタにおける未初期化の変数の可能性 UNINIT.CTOR.MUST コンストラクタにおける未初期化の変数 |
77.1 |
JSF.MBR.SIG.MATCHES.COPY_CSTR メンバー関数の定義には、暗黙に宣言されたコピーコンストラクタのシグネチャと同一のシグネチャを生成するデフォルト引数を含めてはなりません。 |
78 |
CWARN.DTOR.NONVIRT.DELETE 仮想メソッドを持ち、仮想デストラクタを持たないクラスのオブジェクトの式を削除しています CWARN.DTOR.NONVIRT.NOTEMPTY クラスには、基本クラスから継承された仮想関数が含まれていますが、そのデストラクタは仮想ではなく、空ではありません |
79 |
CL.MLK メモリリーク - デストラクタで発生 CL.MLK.VIRTUAL メモリリーク - デストラクタで発生している可能性 |
81 |
CL.SELF-ASSIGN 解放済みメモリの使用 (二重解放) - operator= |
82 |
AUTOSAR.ASSIGN.RETURN 代入演算子は "this" への参照を返す必要があります |
84 |
MISRA.BIN_OP.OVERLOAD カンマ、|| または && 演算子が多重定義されています MISRA.UN_OP.OVERLOAD 単項の & 演算子が多重定義されています |
85 |
JSF.CLASS.DEFINE.OPPOSITE_OPERATOR 2 つの演算子が相反する場合 (== と != など)、両方とも定義し、一方を他方の観点から定義する必要があります |
87 |
JSF.INHERITANCE.NON_ABSTRACT 階層は抽象クラスに基づいていなければなりません |
88 |
MISRA.DERIVE.VIRTUAL クラスが仮想基本クラスから派生しています MISRA.VIRTUAL.BASE.DIAMOND 基本クラスがダイヤモンド階層以外で仮想として使用されています |
89 |
MISRA.VIRTUAL.NOVIRTUAL オーバーライドする仮想関数が 'virtual' キーワードなしで宣言されています |
94 |
JSF.DERIVED.NON_VIRT.REDEFINED 継承された非仮想関数を派生クラスで再定義してはなりません |
95 |
MISRA.SAME.DEFPARAMS オーバーライドする仮想関数とオーバーライドされる関数が異なるデフォルト引数を持っています |
96 |
JSF.CAST.DERIVED.ARRAY.FUNC.CALL 配列を多型的に扱ってはなりません |
97 |
MISRA.FUNC.ARRAY.PARAMS 配列タイプの関数引数がポインタに減退しています |
98 |
MISRA.NS.GLOBAL グローバル名前空間で関数、変数、または型が宣言されています |
107 |
MISRA.OBJ.TYPE.COMPAT 型がその他の宣言の型と互換性がありません |
108 |
MISRA.FUNC.VARARG 関数が可変数の引数を持っています |
109 |
AUTOSAR.FUNC.INLINE_DEF 関数定義をクラス定義内に配置できるのは、(1) その関数がインライン化される予定であるか、(2) それがメンバー関数テンプレートであるか、(3) それがクラステンプレートのメンバー関数である場合のみです |
111 |
LOCRET.ARG 関数がローカル変数のアドレスを返しています LOCRET.GLOB 関数がローカル変数のアドレスを返しています LOCRET.RET 関数がローカル変数のアドレスを返しています |
112 |
MLK.MIGHT メモリリークの可能性 MLK.MUST メモリリーク MLK.RET.MIGHT メモリリークの可能性 MLK.RET.MUST メモリリーク |
113 |
MISRA.RETURN.NOT_LAST 関数内で return が最後のステートメントになっていません |
114 |
FUNCRET.GEN 非 void 関数に戻り値がありません |
115 |
MISRA.FUNC.UNUSEDRET 非 void 関数の戻り値が使用されていません |
117.1 |
MISRA.VAR.NEEDS.CONST 変数は変更されませんが、const 修飾子なしで宣言されています |
118.1 |
MISRA.PPARAM.NEEDS.CONST ポインタパラメーターを使用しないでアドレスされたオブジェクトを変更していますが、const を指すポインタとして宣言されていません |
119 |
MISRA.FUNC.RECUR 再帰関数 |
135 |
MISRA.VAR.HIDDEN 内部のスコープで宣言された識別子によって外部のスコープの識別子が非表示になっています |
136 |
MISRA.VAR.MIN.VIS 名前の可視性が高すぎます |
138 |
MISRA.FUNC.STATIC.REDECL 関数またはオブジェクトの再宣言に 'static' 修飾子がありません MISRA.VAR.UNIQUE.STATIC 静的ストレージ指定の識別子がその他の識別子と不整合です |
140 |
AUTOSAR.REGISTER register キーワードは使用してはなりません |
141 |
AUTOSAR.DECL.IN_DEFN クラス、構造体、または列挙をその型の定義で宣言してはなりません MISRA.CT.UNIQUE.ID 識別子がタグ名と不整合です |
142 |
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 未初期化の変数 |
144 |
MISRA.INIT.BRACES 不適切な初期化子が配置を固定しています |
145 |
MISRA.ENUM.INIT 1 番目以外の列挙子が明示的に初期化されていますが、一部の要素が明示的に初期化されていません |
147 |
MISRA.FLOAT.BIT.REPR 浮動小数点値のビット操作結果はストレージのレイアウトによって変わります |
149 |
MISRA.TOKEN.OCTAL.ESCAPE 8 進数のエスケープ文字列の使用 MISRA.TOKEN.OCTAL.INT 8 進数の整数定数を使用しています |
150 |
AUTOSAR.HEX.UPPER 16 進定数は大文字で記述する必要があります |
151.1 |
CERT.STR.ASSIGN.CONST_TO_NONCONST const char ポインターを非 const char ポインターに割り当てないでください |
152 |
MISRA.DECL.MANY_DCLS 1 つの宣言に複数の宣言子があります |
153 |
MISRA.UNION 和集合が使用されています |
154 |
MISRA.BITFIELD.SIGNED 名前付きの符号付きビットフィールドの長さが 2 未満です MISRA.BITFIELD.TYPE.CPP ビットフィールドの型は、ブール、符号付き/符号なし整数のいずれでもありません MISRA.FIELD.BIT.ENUM ビットフィールドが列挙型を持っています |
156 |
JSF.UNNAMED.MEMBER 構造体 (またはクラス) のメンバーはすべて名前を付け、それらの名前を介してのみアクセスされるようにする必要があります |
157 |
MISRA.LOGIC.POSTFIX 論理 'and' 式または論理 'or' 式のオペランドが後置式ではありません MISRA.LOGIC.SIDEEFF 論理 'and' 式または論理 'or' 式の右側のオペランドは副作用があります |
158 |
MISRA.LOGIC.PRIMARY 論理 'and' 式または論理 'or' 式のオペランドが 1 次式ではありません |
159 |
MISRA.BIN_OP.OVERLOAD カンマ、|| または && 演算子が多重定義されています MISRA.UN_OP.OVERLOAD 単項の & 演算子が多重定義されています |
160 |
MISRA.ASSIGN.COND 条件内で代入演算子が使用されています MISRA.ASSIGN.SUBEXPR 代入演算子は条件外の部分式に使用されています |
162 |
MISRA.CAST.INT.SIGN 自明ではない複合式が別の符号を持つ型にキャストされています MISRA.CONV.INT.SIGN 暗黙的な整数変換により符号が変わります |
164 |
MISRA.SHIFT.RANGE シフト演算子の右側のオペランドは範囲外 (左側のオペランドの最大ビット長以上か、または負) です |
164.1 |
MISRA.SHIFT.RANGE シフト演算子の右側のオペランドは範囲外 (左側のオペランドの最大ビット長以上か、または負) です |
165 |
MISRA.UMINUS.UNSIGNED 単項マイナス演算子が符号なしオペランドに対して使用されています。 |
166 |
MISRA.SIZEOF.SIDE_EFFECT sizeof のオペランドに副作用があります |
168 |
MISRA.COMMA カンマ演算子が使用されています |
169 |
JSF.POINTER_TO_POINTER 可能な限り、ポインターを指すポインターは避ける必要があります |
170 |
MISRA.PTR.TO_PTR_TO_PTR ポインタ宣言に 2 つ以上のレベルの間接指定があります |
173 |
LOCRET.ARG 関数がローカル変数のアドレスを返しています LOCRET.GLOB 関数がローカル変数のアドレスを返しています LOCRET.RET 関数がローカル変数のアドレスを返しています |
174 |
NPD.CHECK.CALL.MIGHT ポインタを明示的に NULL チェックした後に逆参照する可能性のある関数に渡す可能性があります NPD.CHECK.CALL.MUST ポインタを明示的に NULL チェックした後に逆参照する可能性がある関数に渡します NPD.CHECK.MIGHT ポインタを明示的に NULL チェックした後に逆参照する可能性があります NPD.CHECK.MUST ポインタを明示的に NULL チェックした後に逆参照します NPD.CONST.CALL 逆参照する可能性のある関数に NULL を渡しています NPD.CONST.DEREF NULL は逆参照されます NPD.FUNC.CALL.MIGHT NULL を返す関数の戻り値が、これを逆参照する可能性のある別の関数に渡される可能性があります NPD.FUNC.CALL.MUST NULL を返す関数の戻り値が、これを逆参照する可能性がある別の関数に渡されます NPD.FUNC.MIGHT NULL を返す可能性のある関数の戻り値が逆参照される場合があります NPD.FUNC.MUST NULL を返す可能性がある関数の戻り値が逆参照されます NPD.GEN.CALL.MIGHT NULLポインタを逆参照する可能性がある関数に渡す場合があります NPD.GEN.CALL.MUST NULLポインタを逆参照する関数に渡します NPD.GEN.MIGHT NULLポインタを逆参照する可能性があります NPD.GEN.MUST NULLポインタを逆参照します RNPD.CALL NULL チェック前のポインタの、関数呼び出しにおける逆参照は問題となる可能性があります RNPD.DEREF NULL チェック前のポインタの逆参照は問題となる可能性があります |
175 |
MISRA.LITERAL.NULL.PTR リテラルのゼロが NULLポインタ定数として使用されています |
176 |
JSF.FUNC.PTR.TYPEDEF 関数ポインターの宣言時にプログラムの構文を簡略化するには typedef を使用します |
177 |
MISRA.CTOR.NOT_EXPLICIT 組み込み型の引数を持つコンストラクタが '明示的に' 宣言されていません |
178 |
MISRA.CAST.PTR.VRCLASS 仮想基本クラスを指すポインタから派生クラスを指すポインタへのキャストにおいて、'dynamic_cast' を用いていません |
179 |
MISRA.CAST.POLY.TYPE 多様性基本クラスから派生クラスへのキャストです |
180 |
MISRA.CONV.NUM.NARROWER 狭いタイプへの暗黙的な数値変換です |
182 |
MISRA.CAST.INT_TO_PTR 整数型または void を指すポインタを持つオブジェクトがポインタ型にキャストされています MISRA.CAST.PTR.UNRELATED ポインタ型のオブジェクトを関連のない型にキャストしています MISRA.CAST.PTR_TO_INT ポインタと整数型間のキャスト |
184 |
MISRA.CONV.FLOAT 暗黙的な浮動小数点変換です |
185 |
MISRA.C_CAST 非 void タイプへの C スタイルのキャストです MISRA.FUNC_CAST 関数表記が明示的なコンストラクタ呼び出しとは異なるものにキャストされています |
186 |
UNREACH.ENUM enum が取りうる値が原因で、コードは到達不能になっています UNREACH.GEN 到達不能コード UNREACH.RETURN 到達不能な void return文 |
187 |
MISRA.STMT.NO_EFFECT そのステートメントは副作用がなく、制御フローを変更しません |
188 |
JSF.LABEL switch ステートメント内を除き、ラベルを使用してはなりません |
189 |
AUTOSAR.GOTO goto ステートメントは使用してはなりません |
190 |
MISRA.CONTINUE.ILL continue ステートメントが不適切な形式の for ループで使用されています |
191 |
JSF.BREAK break ステートメントは使用してはなりません |
192 |
MISRA.IF.NO_ELSE if/else-if ステートメントのチェインが else で終了していないか、または空の else 句で終了しています |
193 |
MISRA.SWITCH.NOT_WELL_FORMED switch ステートメントの形式が不適切です MISRA.SWITCH.NO_BREAK switch 句の最後に break ステートメントまたは throw ステートメントがありません |
194 |
MISRA.SWITCH.NODEFAULT switch ステートメントの最後に default 句がありません MISRA.SWITCH.NOT_WELL_FORMED switch ステートメントの形式が不適切です |
195 |
MISRA.SWITCH.BOOL switch ステートメントの条件がブール式です |
196 |
MISRA.SWITCH.NOT_WELL_FORMED switch ステートメントの形式が不適切です MISRA.SWITCH.NO_CASE switch ステートメントに case 句がありません |
197 |
MISRA.FOR.COUNTER.FLT for ループのカウンターが浮動小数点タイプです MISRA.FOR.COUNTER.MANY for ループのカウンターが多すぎます |
198 |
MISRA.FOR.COUNTER.MANY for ループのカウンターが多すぎます |
199 |
MISRA.FOR.COND.EQ ループカウンターに対して++ 演算子または -- 演算子を使用していませんが、ループカウンターがイコールかどうかで判定しています MISRA.FOR.INCR for ループのカウンターが不適切な方法で変更されています MISRA.FOR.INCR.CHANGE for ループの増分式がループカウンターで変化していません |
200 |
JSF.LOOP.NULL.INIT_OR_INCR for ループ内での NULL の初期化式と増分式は使用されません |
201 |
MISRA.FOR.COND.CHANGE for ループのカウンターがループ条件セクション内で変更されています MISRA.FOR.STMT.CHANGE for ループのカウンターがループステートメント内で変更されています |
202 |
MISRA.FLOAT_EQUAL 浮動小数点式のイコールがテストされています |
203 |
NUM.OVERFLOW オーバーフローの可能性 NUM.OVERFLOW.DF 起こり得る数値のオーバーフローまたはラップアラウンド |
204 |
MISRA.INCR_DECR.OTHER 増分または減分の演算子がその他の演算子と混合して式で使用されています |
204.1 |
PORTING.VAR.EFFECTS ある使用法が副次的な影響を受ける式で変数が 2 回使用されています |
205 |
AUTOSAR.TYPE.QUAL.VOLATILE volatile 型修飾子は使用してはなりません |
206 |
AUTOSAR.OP.NEW_DELETE non-placement new 式または non-placement delete 式を使用してはなりません AUTOSAR.STDLIB.MEMORY 関数 malloc、calloc、realloc、および free は使用してはなりません FMM.MIGHT メモリの解放の不一致の可能性 FMM.MUST メモリの解放の不一致 |
207 |
JSF.UNENCAPSULATED.GLOBAL カプセル化されていないグローバルデータは避ける必要があります |
208 |
JSF.EXCEPTION C++ 例外を使用してはなりません |
209 |
AUTOSAR.BUILTIN_NUMERIC 基本的な数値型の代わりに <cstdint> で提供される固定幅の整数型を使用する必要があります PORTING.MACRO.NUMTYPE 組み込み数値型を記述するマクロが使用されています |
210 |
PORTING.BITFIELDS 構造内でのビットフィールドの使用法 PORTING.BSWAP.MACRO カスタムバイトの swap マクロがエンディアンのチェックなしで使用されています PORTING.BYTEORDER.SIZE 互換性がない型が 'ntohl' などのネットワークマクロで使用されています |
210.1 |
JSF.CAST.MBR.ORDER.ACCESS_SPEC アクセス指定子で区切られた非静的データメンバーの割り当て順序についての仮定をアルゴリズムで行ってはなりません |
212 |
PORTING.UNSIGNEDCHAR.OVERFLOW.FALSE 'char' 型の符号によっては関係式が常に false になる場合があります PORTING.UNSIGNEDCHAR.OVERFLOW.TRUE 'char' 型の符号によっては関係式が常に true になる場合があります |
213 |
MISRA.EXPR.PARENS.INSUFFICIENT 式の演算子優先規則に制限された依存性が必要です MISRA.EXPR.PARENS.REDUNDANT 式の演算子優先規則に制限された依存性が必要です |
214 |
JSF.USE.STATIC.NON_LOCAL 変換単位が異なる非ローカル静的オブジェクトが特別な順序で初期化されると想定してはなりません |
215 |
MISRA.PTR.ARITH 代数式または配列インデックス式でポインタが使用されています |
"MISRA"、"MISRA C" および、"MISRA C++" は、The MISRA Consortium Limited の登録商標です。