sizeof, _Alignof, или _Generic оперирует выражением с побочным эффектом
Этот дефект возникает, когда sizeof, _Alignof, или _Generic оперирует выражением с побочным эффектом. При оценке выражение с побочным эффектом модифицирует по крайней мере одну из переменных в выражении.
Например, средство проверки дефектов не помечает sizeof(n+1) потому что n+1 не изменяет n. Флаги средства проверки sizeof(n++) потому что n++ предназначен для изменения n.
Проверка также относится к оператору C++ alignof и его расширения C, __alignof__ и __typeof__.
Выражение в _Alignof или _Generic оператор не оценивается. Выражение в sizeof оператор вычисляется только в том случае, если он необходим для вычисления размера массива переменной длины, например, sizeof(a[n++]).
Если выражение с побочным эффектом не вычисляется, изменение переменной из побочного эффекта не происходит. Если вы полагаетесь на изменение, вы можете увидеть неожиданные результаты.
Вычислите выражение с побочным эффектом в отдельном операторе, а затем используйте результат в sizeof, _Alignof, или _Generic оператор.
Например, вместо:
a = sizeof(n++);
n++; a = sizeof(n);
Средство проверки рассматривает вызов функции как выражение с побочным эффектом. Даже если функция не имеет побочных эффектов сейчас, это может иметь побочные эффекты на более поздних дополнениях. Код более удобен для обслуживания при вызове функции за пределами sizeof оператор.
| Группа: Программирование |
| Язык: C | C++ |
| По умолчанию: Вкл для рукописного кода, выкл для сгенерированного кода |
Синтаксис командной строки:
SIDE_EFFECT_IGNORED |
| Воздействие: Низкий |