このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
MISRA C++:2023 Rule 4.1.3
説明
ルール定義
There shall be no occurrence of undefined or critical unspecified behaviour. 1
根拠
未定義の動作または重要な未指定の動作のインスタンスが含まれる C++ コードは、予期せぬ結果や不正確な結果をもたらす可能性があります。このようなコードは、実装ごとに動作が異なる可能性があります。コードでの未定義の動作が原因で発生する問題は、解析するのが困難です。これは、コンパイラが、未定義の動作が発生しないことを前提としてコードを最適化する可能性が考えられるためです。また、特定のテスト データ セットではコードが想定どおりに動作する場合もあるため、このような動作をテスト時に検出するのも困難です。
メモ
多くの MISRA C++:2023 ルールでは、特定の未定義の動作または重要な未指定の動作に対応しています。このルールは、他のルールで対応されていないあらゆる未定義の動作または重要な未指定の動作に適用されます。
Polyspace 実装
Polyspace® は、以下の未定義の動作または重要な未指定の動作のインスタンスに対して違反を報告します。
offsetof
の未定義の使用:ビット フィールドでの
offsetof
の使用2 番目の引数が最初の引数の構造体フィールドではない場合の
offsetof
の使用
シフト演算子の未定義の使用:
シフト演算子の右辺での負のオペランドの使用
右辺のオペランドが左辺のオペランドのデータ型のビット サイズ以上であるシフト演算子の使用
整数定数のオーバーフローの発生:
コンパイル時の整数定数が、その値を格納できないデータ型の符号付き整数変数に代入されている。
潜在型が符号付きである場合に、列挙の潜在型に収まらない列挙値が使用されている。
オーバーフローを発生させる 2 つの整数定数を含む二項演算が実行されている。つまり、結果の値が、演算で使用されているデータ型の許容範囲外になります。整数定数を使用する二項演算では
signed int
データ型が使用されます。ただし、u
やL
などの修飾子を使用する場合は、その限りではありません。
defined
演算子の未定義の使用:識別子のない
defined
の使用展開に
defined
演算子が含まれるマクロの使用
不完全な型の配列の使用
誤った数の引数を渡す関数形式のマクロの使用
トラブルシューティング
ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
グループ: 一般的な原則 |
カテゴリ: 必要 |
バージョン履歴
R2024b で導入
1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.
The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:
MISRA C:2004
MISRA C:2012
MISRA C:2023
MISRA C++:2008
MISRA C++:2023
MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.