>
>
>
V2564. MISRA. There should be no implic…


V2564. MISRA. There should be no implicit integral-floating conversion.

This diagnostic rule is based on the software development guidelines developed by MISRA (Motor Industry Software Reliability Association).

This diagnostic rule applies only to code written in C++. The code should not contain implicit conversions from floating-point types to integer types, and vice versa.

Integer types are:

  • 'signed char', 'unsigned char',
  • 'short', 'unsigned short',
  • 'int', 'unsigned int',
  • 'long', 'unsinged long',
  • 'long long', 'unsigned long long'.

Floating-point types are:

  • 'float',
  • 'double',
  • 'long double'.

Implicit conversion from floating-point types to integer types may result in losing some part of the value (for example, the decimal part) or lead to undefined behavior if the floating-point value cannot be represented as an integer value.

Implicit conversion from integer types to floating-point types may result in imprecise representation not meeting the developer's expectations.

Example of non-compliant code:

void foo1(int x, float y);
void foo2()
{
  float y = 10; 
  int x = 10.5;  
  foo1(y, x); 
}

Example of code considered compliant from the point of view of this diagnostic:

void foo1(int x, float y);
void foo2()
{
  float y = static_cast<float>(10); 
  int x = static_cast<int>(10.5);  
  foo1(static_cast<int>(y), static_cast<float>(x)); 
}

This diagnostic is classified as:

  • MISRA-CPP-5.0.5