Правило 19.2 MISRA C:2012

Ключевое слово объединения не должно использоваться

Описание

Управляйте определением

Ключевое слово объединения не должно использоваться.

Объяснение

Если вы пишете в члена профсоюза и читаете того же члена профсоюза, поведение четко определено. Но если вы читаете различного участника, поведение зависит от относительных размеров участников. Например:

  • Если вы читаете члена профсоюза с более широкой емкостью памяти, значение, которое вы читаете, не задано.

  • В противном случае значение является иждивенцем реализации.

Обменивайтесь сообщениями в отчете

Ключевое слово объединения не должно использоваться.

Поиск и устранение проблем

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Примеры

развернуть все

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: консультация
Язык: C90, C99

Введенный в R2014b