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++ |
| По умолчанию: On для рукописного кода, off для сгенерированного кода |
Синтаксис командной строки
: SIDE_EFFECT_IGNORED |
| Влияние: Низкое |