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