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

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

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

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

    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;
    }

Вызов функции через такие указатели может потенциально привести к ошибкам сегментации.

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

AUTOSAR-M5.2.6