AUTOSAR 18-10 (厳格)(C および C++)

AUTOSAR C++14 Strict 分類基準を使用して、AUTOSAR C++14 Standard、リリース 18-10 とのコンプライアンスを確保することができます。AUTOSAR C++14 (18-10) 分類基準では、Klocwork C/C++ チェッカーと MISRA チェッカーの両方の違反を検出します。非厳格バージョンとは異なり、この分類基準には追加規則のカバレッジが含まれます。

ガイドライン チェッカー名および説明
A0-1-2 (req.)

MISRA.FUNC.UNUSEDRET  非 void 関数の戻り値が使用されていません

A0-1-4 (req.)

MISRA.FUNC.UNUSEDPAR  非仮想関数の仮引数が使用されていません

A0-1-5 (req.)

MISRA.FUNC.VIRTUAL.UNUSEDPAR  仮想関数セットの仮引数が使用されていません

A0-4-2 (req.)

AUTOSAR.TYPE.LONG_DOUBLE  long double 型は使用してはなりません

A2-5-1 (req.)

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

A2-5-2 (req.)

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

A2-7-2 (req.)

MISRA.TOKEN.COMMENTED.CODE  コメントにはコメントアウトされたソースコードが含まれているようです

A2-10-1 (req.)

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

A2-10-5 (adv.)

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

A2-10-6 (req.)

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

A2-11-1 (req.)

AUTOSAR.TYPE.QUAL.VOLATILE  volatile 型修飾子は使用してはなりません

A2-13-1 (req.)

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

A2-13-2 (req.)

MISRA.STRINGS.CONCAT  狭い文字列リテラルと広い文字列リテラルが連結されています

A2-13-3 (req.)

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

A2-13-4 (req.)

AUTOSAR.ADD.STR.TO.NON.CONST  文字列リテラルを非定数ポインターに割り当ててはなりません

A2-13-5 (adv.)

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

A3-1-1 (req.)

AUTOSAR.ADD.ONEDEFRULE.FUNC  関数が一定義規則に違反しています

AUTOSAR.ADD.ONEDEFRULE.VAR  変数が一定義規則に違反しています

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

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

A3-1-3 (adv.)

AUTOSAR.ADD.FILE.EXT  ローカル実装ファイルにファイル拡張子 .cpp が付いていません

A3-1-4 (req.)

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

A3-1-5 (req.)

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

A3-3-1 (req.)

MISRA.LINKAGE.EXTERN  外部リンクを持つオブジェクトまたは関数の宣言がヘッダーファイルにありません

A3-9-1 (req.)

AUTOSAR.BUILTIN_NUMERIC  基本的な数値型の代わりに <cstdint> で提供される固定幅の整数型を使用する必要があります

A4-5-1 (req.)

AUTOSAR.ADD.ENUM.OP  列挙型を算術コンテキストで使用してはなりません

MISRA.ENUM.OPERAND  列挙型の式が代数コンテキストで使用されています

A4-7-1 (req.)

NUM.OVERFLOW  オーバーフローの可能性

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

PRECISION.LOSS  精度の損失

A4-10-1 (req.)

AUTOSAR.ADD.NULLPTR  nullptr リテラルのみを null ポインター定数として使用する必要があります

A5-0-1 (req.)

AUTOSAR.ADD.EXPR.EVAL.MULTI.CALL  式の値は、標準で認められているどの評価順でも同じでなければなりません

AUTOSAR.ADD.EXPR.EVAL.VOLATILE  式の値は、標準で認められているどの評価順でも同じでなければなりません

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

A5-0-2 (req.)

AUTOSAR.ADD.COND.NOT.BOOL  if ステートメントおよび反復ステートメントの条件には bool 型を含める必要があります

AUTOSAR.ADD.LOGIC.NOT_BOOL  if ステートメントおよび反復ステートメントの条件には bool 型を含める必要があります

MISRA.STMT.COND.NOT_BOOLEAN  if または loop ステートメントの条件がブール式になっていません

A5-0-3 (req.)

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

A5-1-1 (req.)

AUTOSAR.ADD.LITERAL  型の初期化を除いて、リテラル値を使用してはなりません

A5-1-2 (req.)

AUTOSAR.LAMBDA.IMPLICIT_CAPTURE  変数はラムダ式で暗黙的にキャプチャしてはなりません

A5-1-3 (req.)

AUTOSAR.LAMBDA.NO_PARAM_LIST  パラメーターリスト (空の可能性がある) はすべてのラムダ式に含める必要があります

A5-1-4 (req.)

AUTOSAR.LAMBDA.REF_LIFETIME  ラムダ式オブジェクトは、その参照キャプチャされたオブジェクトよりも長く存続してはなりません

A5-1-6 (adv.)

AUTOSAR.LAMBDA.IMPLICIT_RETURN_TYPE  非 void 戻り型ラムダ式の戻り型は明示的に指定する必要があります

A5-1-7 (req.)

AUTOSAR.LAMBDA.TYPE_OPERAND  ラムダを decltype または typeid のオペランドにしてはなりません

A5-1-8 (adv.)

AUTOSAR.LAMBDA.NESTED  ラムダ式を他のラムダ式内で定義してはなりません

A5-2-1 (adv.)

AUTOSAR.CAST.DYNAMIC  dynamic_cast は使用してはなりません

A5-2-2 (req.)

AUTOSAR.CAST.CSTYLE  従来の C スタイルのキャストは使用してはなりません

A5-2-3 (req.)

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

A5-2-4 (req.)

AUTOSAR.CAST.REINTERPRET  reinterpret_cast は使用してはなりません

A5-2-5 (req.)

ABV.ANY_SIZE_ARRAY  バッファオーバーフロー - 配列インデックスが範囲外

ABV.GENERAL  バッファオーバーフロー - 配列インデックスが範囲外

ABV.GENERAL.MULTIDIMENSION  バッファオーバーフロー - 配列インデックスが範囲外

ABV.ITERATOR  バッファオーバーフロー - 配列インデックスが範囲外の可能性

ABV.MEMBER  バッファオーバーフロー - 配列インデックスが範囲外

ABV.NON_ARRAY  非配列オブジェクトが配列として使用される

ABV.STACK  バッファオーバーフロー - ローカル配列インデックスが範囲外

ABV.TAINTED  未検証の入力によるバッファオーバーフロー

ABV.UNICODE.BOUND_MAP  文字関数のマッピング時のバッファオーバーフロー

ABV.UNICODE.FAILED_MAP  関数のマッピングに失敗します

ABV.UNICODE.NNTS_MAP  文字関数のマッピング時のバッファオーバーフロー

ABV.UNICODE.SELF_MAP  関数のマッピングに失敗します

ABV.UNKNOWN_SIZE  バッファオーバーフロー - 配列インデックスが範囲外

A5-2-6 (req.)

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

A5-3-2 (req.)

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ポインタを逆参照します

A5-6-1 (req.)

DBZ.CONST  ゼロ定数による除算が発生しました

DBZ.CONST.CALL  値 '0' が除数としてこの値を使用できる関数に渡されます

DBZ.GENERAL  ゼロ除算が発生した可能性があります

DBZ.GENERAL.FLOAT  浮動小数点数のゼロ除算が発生した可能性があります

DBZ.ITERATOR  ループ反復子でゼロ除算が発生した可能性があります

DBZ.ITERATOR.CALL  関数呼出しでゼロ除算が発生した可能性があります

DBZ.ITERATOR.FLOAT  ループ反復子でゼロ除算が発生した可能性があります

A5-10-1 (req.)

AUTOSAR.VIRTUAL.PTR_COMPARE  メンバー仮想関数を指すポインターのテストは、null ポインター定数との等価を確認する目的でのみ行う必要があります

A5-16-1 (req.)

AUTOSAR.TERNARY.NESTED  3 項条件演算子を部分式として使用してはなりません

A6-2-1 (req.)

AUTOSAR.ADD.ASSIGN.OP.SIDE.EFFECT  move および copy 代入演算子は、副作用を発生させることなく基本クラスとクラスのデータメンバーの移動または個別コピーを行う必要があります

A6-4-1 (req.)

AUTOSAR.SWITCH.CASECOUNT  switch ステートメントには、デフォルトのラベルとは異なる 2 つ以上の case 節を指定する必要があります

A6-5-2 (req.)

MISRA.FOR.COUNTER.FLT  for ループのカウンターが浮動小数点タイプです

MISRA.FOR.COUNTER.MANY  for ループのカウンターが多すぎます

A6-5-3 (adv.)

AUTOSAR.DO  do ステートメントは使用してはなりません

A6-5-4 (adv.)

MISRA.FOR.COUNTER.MANY  for ループのカウンターが多すぎます

A6-6-1 (req.)

AUTOSAR.GOTO  goto ステートメントは使用してはなりません

A7-1-1 (req.)

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

A7-1-3 (req.)

AUTOSAR.TYPEDEF.CVQ_EAST  CV 修飾子は、typedef または using name である型の右側に置く必要があります

A7-1-4 (req.)

AUTOSAR.REGISTER  register キーワードは使用してはなりません

A7-1-5 (req.)

AUTOSAR.ADD.AUTO.SPECIFIER  ここに auto 指定子を使用してはなりません

A7-1-6 (req.)

AUTOSAR.TYPEDEF  typedef 指定子は使用してはなりません

A7-1-7 (req.)

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

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

A7-1-8 (req.)

AUTOSAR.DECL.NONTYPE_SPECIFIER  宣言では、型指定子以外の指定子は型指定子の前に置く必要があります

A7-1-9 (req.)

AUTOSAR.DECL.IN_DEFN  クラス、構造体、または列挙をその型の定義で宣言してはなりません

A7-2-2 (req.)

AUTOSAR.ENUM.EXPLICIT_BASE_TYPE  列挙の基になるベース型は、明示的に定義する必要があります

A7-2-3 (req.)

AUTOSAR.ENUM.UNSCOPED  列挙は、スコープ付きの enum クラスとして宣言する必要があります

A7-2-4 (req.)

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

A7-3-1 (req.)

MISRA.NS.USING_DECL  同じ名前空間での識別子に対する複数宣言はその識別子の using 宣言にまたがってはいけません

A7-4-1 (req.)

AUTOSAR.ASM  asm 宣言は使用してはなりません

A7-5-1 (req.)

AUTOSAR.ADD.RTN.REF.CONST.PARAM  const への参照によって渡されるパラメーターへの参照またはポインターを関数が返してはなりません

A7-5-2 (req.)

MISRA.FUNC.RECUR  再帰関数

A8-2-1 (req.)

AUTOSAR.ADD.FUNC.TEMPLATE.TRAIL.RTN  関数テンプレートでは、戻り値型がパラメーターの型に依存する場合、後置戻り値型構文を使用する必要があります

A8-4-1 (req.)

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

A8-4-2 (req.)

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

A8-5-0 (req.)

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

A8-5-1 (req.)

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

A8-5-3 (req.)

AUTOSAR.ADD.AUTO.INIT.FORMAT  auto 型の変数を {} または ={} ブレース初期化を使用して初期化してはなりません。

A8-5-4 (adv.)

AUTOSAR.ADD.CTOR.INIT.LIST  std::initializer_list 型のパラメーターを受け取るユーザー宣言コンストラクタがクラスに含まれる場合、特殊メンバー関数コンストラクタを除いて、そのコンストラクタが唯一のコンストラクタでなければなりません

A9-3-1 (req.)

MISRA.RET.REF.NON_CONST  メンバー関数が非定数のハンドルをメンバー変数に返しています

A9-5-1 (req.)

AUTOSAR.UNION  和集合は使用してはなりません

A10-2-1 (req.)

AUTOSAR.ADD.REDEF.DERIVED.FUNC  パブリックの、または保護された非仮想メンバー関数を派生クラスで再定義してはなりません。

A10-3-1 (req.)

AUTOSAR.MEMB.VIRTUAL.SPEC  仮想関数宣言には 3 つの指定子 (1) virtual、(2) override、(3) final の内の 1 つのみが含まれていなければなりません

A10-3-2 (req.)

AUTOSAR.ADD.OVERRIDE.VIRTUAL.SPECIFIER  オーバーライドする仮想関数はそれぞれ、override または final 指定子で宣言する必要があります

A10-3-3 (req.)

AUTOSAR.MEMB.VIRTUAL.FINAL  仮想関数は final クラスに含めてはなりません

A10-3-5 (req.)

AUTOSAR.ADD.ASSIGN.OP.VIRTUAL  ユーザー定義の代入演算子は virtual であってはなりません

A11-3-1 (req.)

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

A12-1-1 (req.)

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

A12-1-2 (req.)

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

A12-1-4 (req.)

AUTOSAR.CTOR.NO_EXPLICIT  基本型の単一の引数で呼び出せるコンストラクタはすべて、explicit と宣言する必要があります

A12-4-1 (req.)

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

A12-4-2 (adv.)

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

A12-6-1 (req.)

AUTOSAR.ADD.CTOR.MEMBER.INIT  このコンストラクタによって初期化されるクラスデータメンバーはすべて、メンバー初期化子を使用して初期化する必要があります

A12-8-4 (req.)

AUTOSAR.CTOR.MOVE.COPY_SEMANTICS  移動コンストラクタがコピーセマンティクスを使用してそのクラスメンバーと基本クラスを初期化してはなりません

A12-8-5 (req.)

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

A12-8-7 (adv.)

AUTOSAR.ASSIGN.REF_QUAL  代入演算子は、参照修飾子 & を使用して宣言する必要があります

A13-1-2 (req.)

AUTOSAR.OP.LITERAL.SUFFIX  ユーザー定義のリテラル演算子のユーザー定義の接尾辞は、アンダースコアで始まり、その後に 1 字以上の英字が続く必要があります

A13-2-1 (req.)

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

A13-2-2 (req.)

AUTOSAR.OP.BINARY.RETVAL  2 進算術演算子とビット演算子は "prvalue" を返す必要があります

A13-2-3 (req.)

AUTOSAR.OP.RELATIONAL.RETVAL  関係演算子はブール値を返す必要があります

A13-5-1 (req.)

AUTOSAR.OP.INDEX.NON_CONST  "operator[]" を非 const バージョンで多重定義する予定であれば、const バージョンも実装する必要があります

A13-5-2 (req.)

AUTOSAR.OP.CONV.NON_EXPLICIT  ユーザー定義の変換演算子はすべて、explicit と定義する必要があります

A13-5-3 (adv.)

AUTOSAR.OP.CONV  ユーザー定義の変換演算子は使用してはなりません

A13-5-5 (req.)

AUTOSAR.OP.COMPARE.MEMBER  比較演算子は非メンバー関数でなければなりません

AUTOSAR.OP.COMPARE.NON_NOEXCEPT  比較演算子は noexcept でなければなりません

AUTOSAR.OP.COMPARE.PARAMS  比較演算子のパラメーター型は同一でなければなりません

A13-6-1 (req.)

AUTOSAR.DIGIT_SEPARATORS  数字列の区切り子 ' は、(1) 10 進数を 3 桁ずつ、(2) 16 進数を 2 桁ずつ、(3) 2 進数を 4 桁ずつ区切る場合のみ使用する必要があります

A14-5-1 (req.)

MISRA.COPY.CSTR.TMPL  クラスには、単一の汎用パラメーターを持つテンプレートコンストラクタがありますが、コピーコンストラクタが定義されていません

A14-5-3 (adv.)

AUTOSAR.OP.TMPL.NON_MEMBER  非メンバージェネリック演算子は、クラス (構造体) 型、列挙型、または和集合型の宣言が含まれない名前空間でのみ宣言する必要があります

A14-7-2 (req.)

MISRA.SPEC.SAMEFILE  テンプレート特殊化とその基本テンプレートが別々のファイルで宣言されています

A14-8-2 (req.)

AUTOSAR.FUNC.TMPL.EXPLICIT_SPEC  関数テンプレートの明示的な指定は使用してはなりません

A15-1-2 (req.)

MISRA.THROW.PTR  例外オブジェクトがポインタになっています

A15-1-4 (req.)

MLK.MIGHT  メモリリークの可能性

MLK.MUST  メモリリーク

MLK.RET.MIGHT  メモリリークの可能性

MLK.RET.MUST  メモリリーク

A15-2-2 (req.)

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

A15-3-3 (req.)

MISRA.CATCH.ALL  try-catch ブロックに省略記号例外ハンドラーがありません

A15-3-5 (req.)

MISRA.CATCH.BY_VALUE  クラス タイプの例外オブジェクトが値によってキャッチされています

A15-4-1 (req.)

AUTOSAR.EXCPT.DYNAMIC_SPEC  動的な例外指定は使用してはなりません

A15-4-2 (req.)

AUTOSAR.EXCPT.NOEXCPT_THROW  関数を noexcept、noexcept(true)、または noexcept(<true condition>) と宣言する場合、その関数は例外を送出して終了してはなりません

A15-5-1 (req.)

AUTOSAR.EXCPT.SPECIAL_MEMBER_THROW  ユーザー指定のクラスデストラクタ、割り当て解除関数、移動コンストラクタ、移動代入演算子、およびスワップ関数は、どれも例外を送出して終了してはなりません

A15-5-2 (req.)

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

A16-0-1 (req.)

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

A16-2-1 (req.)

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

A16-7-1 (req.)

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

A17-0-1 (req.)

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

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

A18-0-1 (req.)

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

A18-0-2 (req.)

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

A18-0-3 (req.)

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

A18-1-1 (req.)

AUTOSAR.ARRAY.CSTYLE  C スタイルの配列は使用してはなりません

A18-1-2 (req.)

AUTOSAR.VECTOR.BOOL  std::vector<bool> の特殊化は使用してはなりません

A18-1-3 (req.)

AUTOSAR.AUTO_PTR  std::auto_ptr 型は使用してはなりません

A18-5-1 (req.)

AUTOSAR.STDLIB.MEMORY  関数 malloc、calloc、realloc、および free は使用してはなりません

A18-5-2 (req.)

AUTOSAR.OP.NEW_DELETE  non-placement new 式または non-placement delete 式を使用してはなりません

A18-5-3 (req.)

FMM.MIGHT  メモリの解放の不一致の可能性

FMM.MUST  メモリの解放の不一致

A18-5-4 (req.)

AUTOSAR.OP.DELETE.MISSING_VERSION  プロジェクトにサイズ指定付きまたはサイズ指定なしの演算子 "delete" がグローバルに定義されている場合は、サイズ指定付きとサイズ指定なしの両方を定義する必要があります

A18-5-11 (req.)

AUTOSAR.OP.NEW_NO_DELETE  "演算子 new" と "演算子 delete" は一緒に定義する必要があります

A18-9-1 (req.)

AUTOSAR.STDLIB.BIND  std::bind は使用してはなりません

A18-9-2 (req.)

AUTOSAR.FORWARD  他の関数への値の転送は、(1) std::move (値が r 値参照の場合) か (2) std::forward (値が前方参照の場合) を使用して行う必要があります

A18-9-3 (req.)

AUTOSAR.STDLIB.MOVE.CONST  const または const& と宣言されたオブジェクトで std::move を使用してはなりません

A21-8-1 (req.)

AUTOSAR.STDLIB.CCTYPE.UCHAR  <cctype> で定義される文字処理関数の引数は、unsigned char として表現できなければなりません

A26-5-1 (req.)

AUTOSAR.STDLIB.RAND  疑似乱数は std::rand() を使用して生成してはなりません

AUTOSAR.STDLIB.RANDOM_SHUFFLE  疑似乱数は std::rand() を使用して生成してはなりません

A26-5-2 (req.)

AUTOSAR.STDLIB.RANDOM.NBR_GEN_DEFAULT_INIT  乱数エンジンをデフォルトで初期化してはなりません

A27-0-2 (adv.)

NNTS.MIGHT  バッファオーバーフロー - 非 NULL 終了文字列

NNTS.MUST  バッファオーバーフロー - 非 NULL 終了文字列

NNTS.TAINTED  未検証のユーザー入力が原因のバッファオーバーフロー - 非 NULL 終了文字列

SV.UNBOUND_STRING_INPUT.CIN  バインドされていない文字列入力についての cin の使用法

SV.UNBOUND_STRING_INPUT.FUNC  バインドされていない文字列入力の使用法

A27-0-4 (req.)

SV.BANNED.RECOMMENDED.ALLOCA  禁止が推奨されているAPI: スタック割り当て関数

SV.BANNED.RECOMMENDED.NUMERIC  禁止が推奨されているAPI: 安全でない数値化関数

SV.BANNED.RECOMMENDED.OEM  禁止が推奨されているAPI: OEM 文字ページ変換関数

SV.BANNED.RECOMMENDED.PATH  禁止が推奨されているAPI: 安全でないパス名操作関数

SV.BANNED.RECOMMENDED.SCANF  禁止が推奨されているAPI: 安全でない scanf 型関数

SV.BANNED.RECOMMENDED.SPRINTF  禁止が推奨されているAPI: 安全でない sprintf 型関数

SV.BANNED.RECOMMENDED.STRLEN  禁止が推奨されているAPI: 安全でない文字列長関数

SV.BANNED.RECOMMENDED.TOKEN  禁止が推奨されているAPI: 安全でないトークン作成関数

SV.BANNED.RECOMMENDED.WINDOW  禁止が推奨されているAPI: 安全でないウィンドウ関数

M0-1-1 (req.)

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

UNREACH.GEN  到達不能コード

UNREACH.RETURN  到達不能な void return文

M0-1-2 (req.)

CWARN.NOEFFECT.UCMP.GE  符号なし値と 0 との比較は、常に true になります

CWARN.NOEFFECT.UCMP.GE.MACRO  マクロ内で符号なし値と 0 との比較は、常に true になります

CWARN.NOEFFECT.UCMP.LT  符号なし値と 0 との比較は、常に false になります

CWARN.NOEFFECT.UCMP.LT.MACRO  マクロ内で符号なし値と 0 との比較は、常に false になります

M0-1-3 (req.)

LV_UNUSED.GEN  ローカル変数は使用されません

M0-1-9 (req.)

VA_UNUSED.GEN  値を割り当て後に使用しません

VA_UNUSED.INIT  値を初期化後に使用しません

M0-1-10 (adv.)

UNUSED.FUNC.GEN  関数を定義していますが、使用していません

M0-2-1 (req.)

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

M2-7-1 (req.)

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

M2-13-2 (req.)

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

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

M2-13-3 (req.)

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

M2-13-4 (req.)

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

M3-1-2 (req.)

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

M3-2-1 (req.)

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

M3-3-2 (req.)

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

M3-4-1 (req.)

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

M3-9-1 (req.)

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

M3-9-3 (req.)

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

M4-5-1 (req.)

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

M4-5-3 (req.)

MISRA.CHAR.OPERAND  型 'char' または 'wchar_t' の式が文字以外のオペランドで使用されています

M4-10-1 (req.)

MISRA.LITERAL.NULL.INT  NULL が整数値として使用されています

M4-10-2 (req.)

MISRA.LITERAL.NULL.PTR  リテラルのゼロが NULLポインタ定数として使用されています

M5-0-2 (adv.)

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

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

M5-0-3 (req.)

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

M5-0-4 (req.)

MISRA.CONV.INT.SIGN  暗黙的な整数変換により符号が変わります

M5-0-5 (req.)

MISRA.CONV.FLOAT  暗黙的な浮動小数点変換です

M5-0-6 (req.)

MISRA.CONV.NUM.NARROWER  狭いタイプへの暗黙的な数値変換です

M5-0-7 (req.)

MISRA.CAST.FLOAT_INT  整数型への浮動小数点式のキャスト

MISRA.CAST.INT_FLOAT  浮動小数点タイプへの複合式のキャスト

M5-0-8 (req.)

MISRA.CAST.FLOAT.WIDER  より広い浮動小数点タイプへの浮動小数点式のキャスト

MISRA.CAST.INT.WIDER  より広い整数型への複合式のキャスト

M5-0-9 (req.)

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

M5-0-10 (req.)

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

M5-0-11 (req.)

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

M5-0-12 (req.)

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

M5-0-14 (req.)

MISRA.EXPR.COND.NOT_BOOLEAN  条件式の最初のオペランドがブール式ではありません

M5-0-15 (req.)

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

M5-0-16 (req.)

MISRA.PTR.ARITH.NOT_SAME.2008  ポインターオペランドの計算から得られるポインターは、そのポインターオペランドと同じ配列の要素をアドレス指定します

M5-0-20 (req.)

MISRA.BITS.OPERAND  ビット演算のオペランドが別の基底型を持っています

M5-0-21 (req.)

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

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

M5-2-2 (req.)

MISRA.CAST.PTR.VRCLASS  仮想基本クラスを指すポインタから派生クラスを指すポインタへのキャストにおいて、'dynamic_cast' を用いていません

M5-2-3 (adv.)

MISRA.CAST.POLY.TYPE  多様性基本クラスから派生クラスへのキャストです

M5-2-6 (req.)

MISRA.CAST.FUNC_PTR.CPP  キャストにより関数ポインタがその他のポインタ型に変換されます

M5-2-8 (req.)

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

M5-2-9 (req.)

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

M5-2-10 (req.)

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

M5-2-11 (req.)

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

M5-2-12 (req.)

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

M5-3-1 (req.)

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

M5-3-2 (req.)

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

M5-3-3 (req.)

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

M5-3-4 (req.)

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

M5-8-1 (req.)

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

M5-14-1 (req.)

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

M5-18-1 (req.)

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

M5-19-1 (req.)

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

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

M6-2-1 (req.)

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

MISRA.ASSIGN.SUBEXPR  代入演算子は条件外の部分式に使用されています

M6-2-2 (req.)

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

M6-2-3 (req.)

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

M6-3-1 (req.)

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

M6-4-1 (req.)

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

M6-4-2 (req.)

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

M6-4-3 (req.)

MISRA.SWITCH.NOT_WELL_FORMED  switch ステートメントの形式が不適切です

M6-4-4 (req.)

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

M6-4-5 (req.)

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

M6-4-6 (req.)

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

M6-4-7 (req.)

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

M6-5-2 (req.)

MISRA.FOR.COND.EQ  ループカウンターに対して++ 演算子または -- 演算子を使用していませんが、ループカウンターがイコールかどうかで判定しています

M6-5-3 (req.)

MISRA.FOR.COND.CHANGE  for ループのカウンターがループ条件セクション内で変更されています

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

M6-5-4 (req.)

MISRA.FOR.INCR  for ループのカウンターが不適切な方法で変更されています

M6-5-5 (req.)

MISRA.FOR.LOOP_CONTROL.CHANGE.COND  for ループの条件セクションでループ制御変数が変更されています

MISRA.FOR.LOOP_CONTROL.CHANGE.EXPR  for ループの式セクションでループ制御変数が変更されています

M6-5-6 (req.)

MISRA.FOR.LOOP_CONTROL.NOT_BOOLEAN  ループ制御変数がブール値ではありません

M6-6-1 (req.)

MISRA.GOTO.NESTED  入れ子複合ステートメント内で宣言されたラベルに goto しています

M6-6-2 (req.)

MISRA.GOTO.AFTER.LABEL  goto が制約なしで使用されています

M6-6-3 (req.)

MISRA.CONTINUE.ILL  continue ステートメントが不適切な形式の for ループで使用されています

M7-1-2 (req.)

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

M7-3-1 (req.)

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

MISRA.NS.GLOBAL.USING  グローバル名前空間でのディレクティブまたは宣言の使用

M7-3-2 (req.)

MISRA.NS.MAIN  'main' の名前の付いた非グローバル関数が定義されています

M7-3-3 (req.)

MISRA.NAMESPACE.UNMD  ヘッダーファイルに名前のない名前空間があります

M7-3-4 (req.)

MISRA.NS.USING_DIR  ディレクティブを使用しています

M7-3-6 (req.)

MISRA.NAMESPACE.DECL  ヘッダーファイルに using 宣言があります

MISRA.NAMESPACE.DIR  ヘッダーファイルに using ディレクティブがあります

MISRA.NS.USING.HEADER  ヘッダーファイルでディレクティブまたは宣言が使用されています

M7-4-2 (req.)

MISRA.PRAGMA.ASM  不正なアセンブラ命令です

M7-4-3 (req.)

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

M8-0-1 (req.)

MISRA.DECL.MANY_DCLS  1 つの宣言に複数の宣言子があります

M8-3-1 (req.)

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

M8-4-2 (req.)

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

M8-4-4 (req.)

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

M8-5-2 (req.)

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

M9-3-1 (req.)

MISRA.CONST.RET.NON_CONST  定数のメンバー関数が非定数のポインタをメンバー変数に返しています

M9-3-3 (req.)

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

MISRA.MEMB.NON_STATIC  非スタティックメンバー関数は同じクラスのその他の非スタティックメンバーを使用しません

M9-6-4 (req.)

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

M10-1-1 (adv.)

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

M10-1-2 (req.)

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

M10-1-3 (req.)

MISRA.BASE.VIRTUAL.NOTVIRTUAL  基本クラスが継承階層で仮想および非仮想の両方で使用されています

M10-2-1 (adv.)

MISRA.BASE.IDS.UNIQUE  継承階層でメンバー名が 2 回使用されています

M10-3-3 (req.)

MISRA.PUREVIRT.OVRD  純粋な仮想関数が純粋でない仮想関数をオーバーライドしています

M11-0-1 (req.)

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

M12-1-1 (req.)

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

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

M14-5-3 (req.)

MISRA.COPYASSIGN.TMPL  コピー代入演算子は、単一の汎用パラメーターを持つテンプレートコピー代入演算子をクラスに持たせるときに定義する必要があります

M14-6-1 (req.)

MISRA.TEMPLMEM.NOQUAL  インスタンス化されたテンプレートで、依存基本クラスで宣言されたメンバーが修飾子または 'this' なしで使用されています

M15-0-3 (req.)

MISRA.TRY.JUMP  goto ステートメントまたは switch ステートメントでコントロールを try ブロックに転送できます

M15-1-2 (req.)

MISRA.THROW.NULL  NULL が明示的にスローされています

M15-1-3 (req.)

MISRA.THROW.EMPTY  空のスロー式が catch ブロックに属していません

M15-3-3 (req.)

MISRA.CTOR.TRY.NON_STATIC  コンストラクタまたはデストラクタの関数 try-catch ブロックが非スタティックなメンバーを参照しています

M15-3-6 (req.)

MISRA.CATCH.WRONGORD  try-catch ブロックで基本例外クラスのハンドラーが派生例外クラスのハンドラーよりも先に置かれています

M15-3-7 (req.)

MISRA.CATCH.NOALL  省略記号例外ハンドラーが try-catch ブロックの最後に置かれていません

M16-0-1 (req.)

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

M16-0-2 (req.)

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

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

M16-0-5 (req.)

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

M16-0-6 (req.)

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

M16-0-7 (req.)

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

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

M16-0-8 (req.)

MISRA.USE.UNKNOWNDIR  不明なプリプロセッサディレクティブが使用されています

M16-1-1 (req.)

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

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

M16-1-2 (req.)

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

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

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

M16-2-3 (req.)

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

M16-3-1 (req.)

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

M16-3-2 (adv.)

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

M17-0-2 (req.)

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

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

M17-0-3 (req.)

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

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

M17-0-5 (req.)

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

M18-0-3 (req.)

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

M18-0-4 (req.)

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

M18-0-5 (req.)

MISRA.STDLIB.CSTRING  'cstring' ライブラリからの関数が使用されています

MISRA.STDLIB.CSTRING.MACRO  'cstring' ライブラリからのマクロが使用されています

M18-2-1 (req.)

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

M18-7-1 (req.)

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

M19-3-1 (req.)

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

M27-0-1 (req.)

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

サポートのサマリー:

  • 実施される 228 個の規則

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