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

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

Группа: наложение устройства хранения данных
Категория: консультация
Категория AGC: консультация
Введенный в R2014b