﻿# V3552\. AUTOSAR\. Cast should not convert a pointer to a function to any other pointer type, including a pointer to function type\.

Данное диагностическое правило основано на руководстве [AUTOSAR](https://www.autosar.org/) \(AUTomotive Open System ARchitecture\) по разработке программного обеспечения\.

Приведение указателя на функцию к любому другому указателю ведет к неопределенному поведению\. Приведение типов между указателями на функцию несоответствующего типа также станет причиной неопределенного поведения при вызове этой функции\.



Пример кода с нарушениями правила, в котором все четыре приведения типа являются недопустимыми:

```cpp
void foo(int32_t x); 
typedef void (*fp)(int16_t x); 

void bar() 
{ 
  fp fp1 = reinterpret_cast<fp>(&foo);
  fp fp2 = (fp)foo;
  void* vp = reinterpret_cast<void*>(fp1);
  char* chp = (char*)fp1;
}
```

Вызов функции через такие указатели может потенциально привести к [ошибкам сегментации](https://pvs-studio.ru/ru/blog/terms/0063/)\.