Данное диагностическое правило основано на руководстве 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; }
Вызов функции через такие указатели может потенциально привести к ошибкам сегментации.
Данная диагностика классифицируется как:
|