Правило 13.6 MISRA C:2012

Операнд sizeof оператора не должен содержать выражение, которое имеет потенциальные побочные эффекты

Описание

Управляйте определением

Операнд sizeof оператора не должен содержать выражение, которое имеет потенциальные побочные эффекты.

Объяснение

Аргумент оператора sizeof обычно не оценивается во время выполнения. Если аргумент будет выражением, вы можете неправильно ожидать, что выражение выполнено.

Реализация Polyspace

Правило не нарушено, если аргумент является переменной volatile.

Обменивайтесь сообщениями в отчете

Операнд sizeof оператора не должен содержать выражение, которое имеет потенциальные побочные эффекты.

Поиск и устранение проблем

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Примеры

развернуть все

#include <stddef.h>
int x;
int y[40];
struct S {
    int a;
    int b;
};
struct S myStruct;

void main() {
    size_t sizeOfType;
    sizeOfType = sizeof(x);         /* Compliant */
    sizeOfType = sizeof(y);         /* Compliant */
    sizeOfType = sizeof(myStruct);  /* Compliant */
    sizeOfType = sizeof(x++);       /* Non-compliant */
}

В этом примере нарушено правило, когда выражение x++ используется в качестве аргумента оператора sizeof.

Проверяйте информацию

Группа: побочные эффекты
Категория: обязательный
Категория AGC: обязательный
Язык: C90, C99

Введенный в R2014b