Данное диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.
Приведения между указателями на объект и целочисленными типами могут послужить причиной неопределенного, неуточненного или зависимого от реализации поведения. В связи с этим, MISRA рекомендует не использовать подобные приведения.
Пример нарушения 1 (для языка C):
int *p = (int *)0x0042;
int i = p;
enum en { A, B } e = (enum en) p;
Пример нарушения 2 (для языка C++):
struct S { int16_t i; int16_t j; } *ps = ....;
int i64 = reinterpret_cast<int>(ps);
Пример нарушения 3 (для языка C и С++):
void foo(int i) {}
void wrong_param_type()
{
char *pc = ....;
foo((int) pc);
}
Пример нарушения 4 (для языка C и C++):
int wrong_return_type()
{
double *pd = ....;
return (int) pd;
}
Данная диагностика классифицируется как:
|