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

This diagnostic rule is based on the software development guidelines developed by [MISRA](https://www.misra.org.uk/) \(Motor Industry Software Reliability Association\)\.

Conversions between pointers to objects and integer types can lead to undefined, unspecified, or implementation\-specific behavior\. For that reason, MISRA does not recommend using such conversions\.

Example of non\-compliant code 1 \(C\): 

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

Example of non\-compliant code 2 \(C\+\+\):

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

Example of non\-compliant code 3 \(C and C\+\+\):

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

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

Example of non\-compliant code 4 \(C and C\+\+\):

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