Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
>
>
>
V2568. MISRA. Both operands of an...
menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

V2568. MISRA. Both operands of an operator should be of the same type category.

25 Авг 2025

Диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.

Диагностическое правило актуально только для C.

Стандарт MISRA C определяет собственную модель типов — Essential type model.

Преобразование арифметических операндов, чьи сущностные типы не совпадают, может привести к неочевидным проблемам.

Язык C предоставляет свободу преобразования арифметических типов. Это может повлечь за собой неочевидные проблемы, такие как потеря знака, переполнение или потеря значимости. Несмотря на свою строгость, стандарт MISRA C разрешает преобразования арифметических типов в случае, когда сущностные типы операндов совпадают.

Исключение. Левый и правый операнды операторов +, -, +=, -= могут иметь сущностные character и signed/unsigned типы соответственно.

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

enum { A };
int i;
unsigned u;
void foo()
{
  A + u;
  0.f - i;
  A > (_Bool)0;
}

Пример корректного кода:

void foo(unsigned short x, _Bool b)
{
  x + 1UL;
  if (b && x > 4U) ....
}

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

  • MISRA-C-2012-10.4
  • MISRA-C-2023-10.4