Перекрытие памяти между левыми и правыми сторонами присвоения
Перекрывающееся присвоение происходит, когда существует перекрытие памяти между левыми и правыми сторонами присвоения. Например, переменная присвоена себе, или один член объединения присвоен другому.
Если левые и правые стороны присвоения имеют перекрытие памяти, поведение или избыточно или не определено. Например:
Самоприсвоение, такое как x=(int)(long)x; избыточно, если x не является volatile - квалифицированный.
Присвоение одного члена профсоюза другому вызывает неопределенное поведение.
Например, в следующем коде:
Результат присвоения, u1.a = u1.b не определен, потому что u1.b не инициализируется.
Результат присвоения u2.b = u2.a зависит от выравнивания и порядка байтов реализации. Это не задано стандартами C.
union {
char a;
int b;
}u1={'a'}, u2={'a'}; //'u1.a' and 'u2.a' are initialized
u1.a = u1.b;
u2.b = u2.a;
Избегайте присвоения между двумя переменными, которые имеют перекрывающуюся память.
| Группа: Программирование |
| Язык: C | C++ |
| Значение по умолчанию: 'off' |
Синтаксис командной строки: OVERLAPPING_ASSIGN |
| Влияние: низко |
| ID CWE: 665 |