﻿# V2571\. MISRA\. Conversions between pointers to objects and integer types should not be performed\.

Диагностическое правило основано на руководстве [MISRA](https://www.misra.org.uk/) \(Motor Industry Software Reliability Association\) по разработке программного обеспечения\.

Приведения между указателями на объект и целочисленными типами могут послужить причиной неопределенного, неуточненного или зависимого от реализации поведения\. В связи с этим, MISRA рекомендует не использовать подобные приведения\.

Пример нарушения 1 \(для языка C\): 

```cpp
int *p = (int *)0x0042;
int i = p;
enum en { A, B } e = (enum en) p;
```

Пример нарушения 2 \(для языка C\+\+\):

```cpp
struct S { int16_t i; int16_t j; } *ps = ....;
int i64 = reinterpret_cast<int>(ps);
```

Пример нарушения 3 \(для языка C и С\+\+\):

```cpp
void foo(int i) {}

void wrong_param_type()
{
  char *pc = ....;
  foo((int) pc); 
}
```

Пример нарушения 4 \(для языка C и C\+\+\):

```cpp
int wrong_return_type()
{
  double *pd = ....;
  return (int) pd;
}
```