exponenta event banner

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

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

Описание

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

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

Объяснение

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

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

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

Поиск неисправностей

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

Примеры

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

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