Данное диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.
Это правило актуально только для C. Преобразование выражений нецелочисленных типов к указателю и наоборот может привести к неопределённому поведению.
Стандарт MISRA определяет следующую модель сущностных типов (Essential type model), в которой переменная может иметь тип:
Преобразование сущностного 'Boolean', 'character' или 'enum' типа к указателю может привести к формированию указателя с неверным выравниванием, что ведёт к неопределённому поведению. Пример:
enum Nums { ONE, TWO, .... }; double* bar(Nums num) { .... return (double*)num; }
Преобразование указателя к вышеописанным сущностным типам может привести к тому, что результирующее значение не может быть представлено в выбранном сущностном типе, что также приводит к неопределённому поведению. Пример:
void foo(void) { .... char *a = "something"; char b = a; .... }
Преобразование сущностного 'floating' типа к указателю или наоборот ведёт к неопределенному поведению. Пример:
void foo(short *p) { // .... float f = (float) p; // .... }
Данная диагностика классифицируется как:
|