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

V2589. MISRA. Casts between a pointer and a non-integer arithmetic type should not be performed.

25 Авг 2025

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

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

Преобразование выражений нецелочисленных типов к указателю и наоборот может привести к неопределённому поведению.

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

Преобразование essential Boolean, essential character или essential enum типа к указателю может привести к формированию указателя с неверным выравниванием, что, в свою очередь, может привести к неопределённому поведению.

Пример:

enum Nums
{
  ONE, 
  TWO,
  ....
};

double* bar(Nums num)
{
  ....
  return (double*)num;
}

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

Пример:

void foo(void)
{
  ....
  char *a = "something";
  char b = a;
  ....
}

Преобразование essential floating типа к указателю или наоборот может привести к неопределённому поведению.

Пример:

void foo(short *p)
{
  // ....
  float f = (float) p;
  // ....
}

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

  • MISRA-C-2012-11.7
  • MISRA-C-2023-11.7