MISRA C:2012 Rule 6.3
説明
ルール定義
A bit field shall not be declared as a member of a union 1 .
This rule comes from MISRA C™:2012 Amendment 3.
根拠
C 標準は、型の内部でのビット フィールドのビット位置を指定していません。たとえば、次のコードのビット フィールド oneByte は、int32_t ストレージ単位の先頭 8 ビットまたは末尾 8 ビットの可能性があります。
int32_t oneByte:8;
number でのビット フィールド oneByte のオーバーレイ方法は未指定です。union myUnion {
int32_t number;
int oneByte: 8;
};
void foo() {
union myUnion U1;
U1.number = 0xDEADBEEF;
}U1.oneByte の値は、実装に応じて 0xDE または 0xEF のいずれかになります。共用体内でビット フィールドを使用する場合、コードの動作は実装によって異なります。共用体内でのビット フィールドの使用は避けてください。
Polyspace 実装
ビット フィールドが共用体のメンバーとして宣言されている場合、Polyspace® はこのルールの違反を報告します。ビット フィールドを共用体メンバー内のサブオブジェクトとして宣言することは、このルールの違反ではありません。たとえば、struct 内にビット フィールドがあり、struct を含む共用体を宣言する場合、このルールの違反ではありません。
トラブルシューティング
ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。
例
チェック情報
| グループ: 型 |
| カテゴリ: 必要 |
| AGC カテゴリ: 必要 |
バージョン履歴
R2024a で導入
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.