Объединения не должны использоваться
Объединения не должны использоваться.
Используя объединения, чтобы сохранить значение может привести к неверному истолкованию значения и привести к неопределенному поведению. Например:
union Data{ int i; double d; }; void bar_int(int); void bar_double(double); void foo(void){ Data var; var.d = 3.1416; bar_int(var.d);//Undefined Behavior }
bar_int
, double
данные в объединении неправильно истолкованы как int
, который является неопределенным поведением. Компиляторы могут реагировать на это неверное истолкование по-другому в зависимости от их реализации. Чтобы избежать неопределенных поведений, не используйте union
.В некоторых случаях использование объединений может быть необходимым, чтобы увеличить КПД. В таких случаях используйте объединения после документирования соответствующих заданных реализацией поведений компилятора. В предыдущем случае, перед использованием union
, консультируйтесь с руководством компилятора, который вы используете и документ, как компилятор реагирует на интерпретацию double
как int
.
Polyspace® отмечает объявление union
. Вы можете рассмотреть использование union
необходимый или приемлемый в вашем коде. В таких случаях выровняйте по ширине нарушение путем аннотирования результата или при помощи комментариев к коду. См.:
Обратитесь к Результатам Polyspace Через Исправления ошибок или Выравнивания, если вы рассматриваете результаты в пользовательском интерфейсе Polyspace.
Обратитесь к Результатам в Polyspace доступ Через Исправления ошибок или Выравнивания, если вы рассматриваете результаты в веб-браузере.
Аннотируйте Код и Скройте Известные или Приемлемые результаты, если вы рассматриваете результаты в IDE.
Если вы ожидаете нарушение правила, но не видите его, относитесь, чтобы Диагностировать, Почему Кодирующие Стандартные Нарушения Не Появляются как ожидалось.
Группа: Классы |
Категория: необходимый |