Our website uses cookies to enhance your browsing experience.
Accept
to the top
>
>
>
V2564. MISRA. There should be no...
menu mobile close menu
Additional information
toggle menu Contents

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

Dec 04 2019

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-2008-5.0.5