Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
>
>
>
V3535. AUTOSAR. Operand of sizeof()...
menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

V3535. AUTOSAR. Operand of sizeof() operator should not have other side effects.

03 Мар 2021

Данное диагностическое правило основано на руководстве AUTOSAR (AUTomotive Open System ARchitecture) по разработке программного обеспечения.

Оператор 'sizeof()' не выполняет переданное ему выражение, а только вычисляет тип результирующего выражения и возвращает его размер на этапе компиляции. Следовательно, для любого кода внутри 'sizeof()' компилятор не генерирует ассемблерного кода (невыполняемые контекст), и ожидаемые операции внутри не будут произведены.

Поэтому операнд, передаваемый 'sizeof()', не должен содержать каких-либо сторонних эффектов, чтобы избежать потери операций.

Пример кода, на который анализатор выдаст предупреждение:

int x = ....;
....
size_t s = n * sizeof(x++);

Для получения ожидаемого эффекта нужно переписать код следующим образом:

int x = ....;
....
++x;
size_t s = n * sizeof(x);

Данная диагностика классифицируется как:

  • AUTOSAR-M5.3.4