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