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

V2585. MISRA. Casts between a void pointer and an arithmetic type should not be performed.

09 Июн 2021

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

Это правило актуально только для C. Преобразование переменной или литерала арифметического типа к типу 'void *' и наоборот может послужить причиной неопределённого (для чисел с плавающей точкой) или зависимого от платформы поведения (для целочисленных типов).

Рассмотрим первый синтетический пример:

void* foo(void)
{
  double pi = 3.14;
  return pi;
}

В данном случае переменная 'pi', имеющая тип 'double', неявно приводится к типу 'void *'. Такой код приведёт к неопределённому поведению.

Рассмотрим второй синтетический пример:

void bar(void)
{
  int a = 5;
  void* b = (void*)a;
}

Здесь переменная типа 'int' явно приводится к типу 'void *'. Дальнейшее разыменование такого указателя может потенциально привести к ошибкам сегментации.

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

  • MISRA-C-11.6