Перекрытие памяти между левыми и правыми сторонами присвоения
Перекрывающееся присвоение происходит, когда существует перекрытие памяти между левыми и правыми сторонами присвоения. Например, переменная присвоена себе, или один член объединения присвоен другому.
Если левые и правые стороны присвоения имеют перекрытие памяти, поведение или избыточно или не определено. Например:
Самоприсвоение, такое как 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 |