MISRA C:2012 Rule 13.6

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

Описание

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

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

Объяснение

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

Реализация Polyspace

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

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

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

Примеры

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

#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: обязательный
Введенный в R2014b