Main Content

MISRA C:2023 Rule 19.2

The union keyword should not be used

Since R2024a

Description

Rule Definition

The union keyword should not be used.

Rationale

If you write to a union member and read the same union member, the behavior is well-defined. But if you read a different member, the behavior depends on the relative sizes of the members. For instance:

  • If you read a union member with wider memory size, the value you read is unspecified.

  • Otherwise, the value is implementation-dependent.

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

expand all

unsigned int zext(unsigned int s)
{
    union                 /* Non-compliant */
    {
        unsigned int ul;
        unsigned short us;
    } tmp;

    tmp.us = s;
    return tmp.ul;        /* Unspecified value */
}

In this example, the 16-bit short field tmp.us is written but the wider 32-bit int field tmp.ul is read. Using the union keyword can cause such unspecified behavior. Therefore, the rule forbids using the union keyword.

Check Information

Group: Overlapping Storage
Category: Advisory
AGC Category: Advisory

Version History

Introduced in R2024a