JSF AV C++ ID

以下の表では、次世代主力戦闘機 C++ コーディング基準を Klocwork C++ チェッカーにマッピングしています。Lockheed Martin 社が開発した次世代主力戦闘機 C++ コーディング基準は、プログラマーがセーフティクリティカルシステム用にエラーのないコードを開発するために役立ちます。

ガイドライン チェッカー名および説明
規則 001
規則 002
規則 003
規則 004
規則 005
規則 006
規則 007
規則 008
規則 009
規則 010
規則 011

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

規則 012

MISRA.CHAR.DIGRAPH  2 文字表記の使用

規則 013

AUTOSAR.TYPE.WCHAR_T  wchar_t 型は使用してはなりません

規則 014

MISRA.LITERAL.SUFFIX.CASE  リテラルの添え字は小文字です

規則 015
規則 016
規則 017

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

規則 018

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

規則 019

AUTOSAR.SETLOCALE  ライブラリ <clocale> (locale.h) と setlocale 関数は使用してはなりません

規則 020

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

規則 021

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

規則 022

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

規則 023

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

規則 024

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

規則 025

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

規則 026

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  不適切なプリプロセッサディレクティブです

規則 027

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

MISRA.USE.DEFINE  マクロが保護されずに定義されています

規則 028

MISRA.USE.DEFINE  マクロが保護されずに定義されています

規則 029

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

規則 030

MISRA.DEFINE.BADEXP.CPP  C++ ソースで不適切なマクロ展開です

規則 031

MISRA.USE.DEFINE  マクロが保護されずに定義されています

規則 032

MISRA.USE.DEFINE  マクロが保護されずに定義されています

規則 033

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

規則 034
規則 035

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

規則 036

HA.DUPLICATE  

HA.UNUSED  

規則 037

HA.OPTIMIZE  

規則 038
規則 039

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

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

規則 040

CWARN.INCL.NO_INTERFACE  ソースファイルにインターフェイスヘッダーが含まれていません

規則 041
規則 042

AUTOSAR.STYLE.SINGLE_STMT_PER_LINE  各式ステートメントと識別子宣言は、個別の行に配置する必要があります

規則 043
規則 044
規則 045
規則 046

MISRA.DEFINE.NOT_DISTINCT.C99.2012  識別子名が長すぎます

規則 047
規則 048
規則 049
規則 050
規則 051
規則 052
規則 053
規則 053.1

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

規則 054
規則 055
規則 056
規則 057

JSF.ORDER.ACCESS_SPEC  クラスの public、protected、および private セクションは、この順に宣言する必要があります

規則 058
規則 059

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

規則 060
規則 061
規則 062
規則 063
規則 064
規則 065
規則 066
規則 067

MISRA.MEMB.NOT_PRIVATE  非 POD クラスのメンバー変数がプライベートではありません

規則 068
規則 069

MISRA.MEMB.NON_CONST  非定数のメンバー関数はどのメンバー変数も変更しません

規則 070

AUTOSAR.FRIEND_DECL  フレンド宣言は使用してはなりません

規則 070.1

AUTOSAR.DTOR.NON_VIRTUAL  クラスのパブリックデストラクタが非仮想的である場合、そのクラスは final と宣言する必要があります

規則 071

UNINIT.CTOR.MIGHT  コンストラクタにおける未初期化の変数の可能性

規則 071.1

MISRA.CTOR.DYNAMIC  オブジェクトの動的タイプがそのコンストラクタのボディから使用されています

規則 072
規則 073
規則 074

AUTOSAR.CTOR.NSDMI_INIT_LIST  コンストラクタ内の NSDMI と非静的メンバー初期化子の両方を同じ型で使用してはなりません

規則 075

CWARN.MEMBER.INIT.ORDER  初期化リストのメンバーが、クラスで宣言された順序でリストされません

規則 076

CL.FFM.ASSIGN  解放済みメモリの使用 (二重解放) - operator= が無いため

CL.FFM.COPY  解放済みメモリの使用 (二重解放) - コピーコンストラクタが無いため

CL.SHALLOW.ASSIGN  解放済みメモリの使用 (二重解放) - 演算子 = での浅いコピー

CL.SHALLOW.COPY  解放済みメモリの使用 (二重解放) - コピーコンストラクタでの浅いコピー

規則 077

MISRA.CTOR.BASE  コンストラクタがその基本クラスのコンストラクタを明示的に呼び出していません

UNINIT.CTOR.MIGHT  コンストラクタにおける未初期化の変数の可能性

UNINIT.CTOR.MUST  コンストラクタにおける未初期化の変数

規則 077.1

JSF.MBR.SIG.MATCHES.COPY_CSTR  メンバー関数の定義には、暗黙に宣言されたコピーコンストラクタのシグネチャと同一のシグネチャを生成するデフォルト引数を含めてはなりません。

規則 078

CWARN.DTOR.NONVIRT.DELETE  仮想メソッドを持ち、仮想デストラクタを持たないクラスのオブジェクトの式を削除しています

CWARN.DTOR.NONVIRT.NOTEMPTY  クラスには、基本クラスから継承された仮想関数が含まれていますが、そのデストラクタは仮想ではなく、空ではありません

規則 079

CL.MLK  メモリリーク - デストラクタで発生

CL.MLK.VIRTUAL  メモリリーク - デストラクタで発生している可能性

規則 080
規則 081

CL.SELF-ASSIGN  解放済みメモリの使用 (二重解放) - operator=

規則 082

AUTOSAR.ASSIGN.RETURN  代入演算子は "this" への参照を返す必要があります

規則 083
規則 084

MISRA.BIN_OP.OVERLOAD  カンマ、|| または && 演算子が多重定義されています

MISRA.UN_OP.OVERLOAD  単項の & 演算子が多重定義されています

規則 085

JSF.CLASS.DEFINE.OPPOSITE_OPERATOR  2 つの演算子が相反する場合 (== と != など)、両方とも定義し、一方を他方の観点から定義する必要があります

規則 086
規則 087

JSF.INHERITANCE.NON_ABSTRACT  階層は抽象クラスに基づいていなければなりません

規則 088

MISRA.DERIVE.VIRTUAL  クラスが仮想基本クラスから派生しています

MISRA.VIRTUAL.BASE.DIAMOND  基本クラスがダイヤモンド階層以外で仮想として使用されています

規則 088.1
規則 089

MISRA.VIRTUAL.NOVIRTUAL  オーバーライドする仮想関数が 'virtual' キーワードなしで宣言されています

規則 090
規則 091
規則 092
規則 093
規則 094

JSF.DERIVED.NON_VIRT.REDEFINED  継承された非仮想関数を派生クラスで再定義してはなりません

規則 095

MISRA.SAME.DEFPARAMS  オーバーライドする仮想関数とオーバーライドされる関数が異なるデフォルト引数を持っています

規則 096

JSF.CAST.DERIVED.ARRAY.FUNC.CALL  配列を多型的に扱ってはなりません

規則 097

MISRA.FUNC.ARRAY.PARAMS  配列タイプの関数引数がポインタに減退しています

規則 097.1
規則 098

MISRA.NS.GLOBAL  グローバル名前空間で関数、変数、または型が宣言されています

規則 099
規則 100
規則 101
規則 102
規則 103
規則 104
規則 105
規則 106
規則 107

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

規則 108

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

規則 109

AUTOSAR.FUNC.INLINE_DEF  関数定義をクラス定義内に配置できるのは、(1) その関数がインライン化される予定であるか、(2) それがメンバー関数テンプレートであるか、(3) それがクラステンプレートのメンバー関数である場合のみです

規則 110
規則 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 関数の戻り値が使用されていません

規則 116
規則 117
規則 117.1

MISRA.VAR.NEEDS.CONST  変数は変更されませんが、const 修飾子なしで宣言されています

規則 117.2
規則 118
規則 118.1

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

規則 118.2
規則 119

MISRA.FUNC.RECUR  再帰関数

規則 120
規則 121
規則 122
規則 123
規則 124
規則 125
規則 126
規則 127
規則 128
規則 129
規則 130
規則 131
規則 132
規則 133
規則 134
規則 135

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

規則 136

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

規則 137
規則 138

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

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

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

規則 143
規則 144

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

規則 145

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

規則 146
規則 147

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

規則 148
規則 149

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

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

規則 150

AUTOSAR.HEX.UPPER  16 進定数は大文字で記述する必要があります

規則 151
規則 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  ビットフィールドが列挙型を持っています

規則 155
規則 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  暗黙的な整数変換により符号が変わります

規則 163
規則 164

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

規則 164.1

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

規則 165

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

規則 166

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

規則 167
規則 168

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

規則 169

JSF.POINTER_TO_POINTER  可能な限り、ポインターを指すポインターは避ける必要があります

規則 170

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

規則 171
規則 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  狭いタイプへの暗黙的な数値変換です

規則 181
規則 182

MISRA.CAST.INT_TO_PTR  整数型または void を指すポインタを持つオブジェクトがポインタ型にキャストされています

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

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

規則 183
規則 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  アクセス指定子で区切られた非静的データメンバーの割り当て順序についての仮定をアルゴリズムで行ってはなりません

規則 211
規則 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  代数式または配列インデックス式でポインタが使用されています

規則 216
規則 217
規則 218
規則 219
規則 220
規則 221