MISRA C:2012 Rule 19.2

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

Описание

Определение правила

Не следует использовать ключевое слово объединение.

Объяснение

Если вы записываете в представитель объединения и читаете того же представителя объединения, поведение четко определено. Но если вы читаете другого представителя, поведение зависит от относительных размеров представителей. Для образца:

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

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

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

Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».

Примеры

расширить все

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 ключевое слово.

Проверяйте информацию

Группа: Перекрытие хранилища
Категория: Консультационные
Категория СМЖЛ: Консультационная
Введенный в R2014b