メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

MISRA C:2012 Rule 19.2

The union keyword should not be used

説明

ルール定義

The union keyword should not be used 1 .

根拠

共用体のメンバーに書き込み、その同じ共用体メンバーを読み取る場合、動作は適切に定義されています。しかし、異なるメンバーを読み取る場合、動作はメンバーの相対的なサイズに依存します。次に例を示します。

  • より幅広いメモリ サイズの共用体メンバーを読み取る場合、読み取る値は指定されない。

  • そうでない場合の値は実装によって異なります。

トラブルシューティング

ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。

すべて展開する

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

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

この例では、16 ビットの short フィールド tmp.us が書き込まれますが、より幅広い 32 ビットの int フィールド tmp.ul が読み取られます。union キーワードの使用により、このような未指定の動作が発生します。したがって、ルールにより union キーワードの使用は禁止されています。

チェック情報

グループ: 重複ストレージ
カテゴリ: 推奨
AGC カテゴリ: 推奨

バージョン履歴

R2014b で導入


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.