exponenta event banner

MISRA C:2012 Правило 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 оператор.

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

Группа: Побочные эффекты
Категория: Обязательно
Категория СМЖЛ: обязательная
Представлен в R2014b