MISRA C:2012 Rule 6.3
Description
Rule Definition
A bit field shall not be declared as a member of a union.
This rule comes from MISRA C™: 2012 Amendment 3.
Rationale
The C standard does not specify the bitwise position of a bit field within a type.
For example, in this code, the bit field oneByte
can be the first
eight bits or the last eight bits of the int32_t
storage
unit.
int32_t oneByte:8;
oneByte
is overlaid on the 32-bit
number
:union myUnion { int32_t number; int oneByte: 8; }; void foo() { union myUnion U1; U1.number = 0xDEADBEEF; }
U1.oneByte
can be either
0xDE
or 0xEF
, depending on the
implementation.Using bit fields within unions makes the behavior of your code implementation-dependent. Avoid using bit fields within unions.
Polyspace Implementation
Polyspace® reports a violation of this rule if a bit field is declared as a member of
a union. Declaring a bit field as a subobject within union members is not a violation of
this rule. For example, if you have a bitfield within a struct
and
declare a union containing the struct
, this rule is not
violated.
Troubleshooting
If you expect a rule violation but do not see it, refer to Diagnose Why Coding Standard Violations Do Not Appear as Expected.
Examples
Check Information
Group: Types |
Category: Required |
AGC Category: Required |
Version History
Introduced in R2024a