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 |
Влияние: Низкое |