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