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