# V3540. AUTOSAR. There should be no implicit integral-floating conversion.

Данное диагностическое правило основано на руководстве AUTOSAR (AUTomotive Open System ARchitecture) по разработке программного обеспечения.

В коде не должно быть неявных преобразований значений вещественного типа в целочисленный и наоборот.

Под целочисленными типами подразумеваются:

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

Под типами с плавающей точкой подразумеваются:

- 'float',
- 'double',
- 'long double'.

При неявном преобразовании значений вещественных типов в целые может быть утеряна информация (например, дробная часть), а также возможно возникновение неопределенного поведения, если значение вещественного типа не может быть представлено целым типом.

Неявное преобразование значения целого типа в вещественный может привести к его неточному представлению, которое не соответствует ожиданиям разработчика.

Пример кода, на который анализатор выдаст предупреждения:

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

Пример правильного с точки зрения этой диагностики кода:

    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));
    }

Данная диагностика классифицируется как:

AUTOSAR-M5.0.5