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 |
Удар: низко |
Find defects (-checkers)
| MISRA C:2012 Rule 13.6
| Redundant expression in sizeof operand