﻿# V2022\. Implicit type conversion from integer type to enum type\.

Данное диагностическое правило добавлено по просьбе пользователей\.

Правило позволяет найти все неявные приведения целочисленных типов к типам перечислений\. Это помогает выполнить рефакторинг кода и иногда выявить ошибки\.

Данное правило актуально только для языка C\.

Рассмотрим примеры конструкций, на которые анализатор выдаст предупреждение\. 

**Пример N1:**

```cpp
typedef enum
{
  Horizontal = 0x1,
  Vertical = 0x2
} Orientation;

void foo1()
{
  int pos = 1;
  Orientation orientation = pos;   // V2022
}
```

В этом примере происходят неявные приведения целочисленного значения 'pos' к переменной типа 'Orientation'\.

**Пример N2:**

```cpp
Orientation GetOrientation (int pos)
{
  return pos;   // V2022
}
```

Функция 'GetOrientation' возвращает значение типа 'Orientation' и неявно приводит значение 'pos' к этому типу\.

**Пример N3:**

```cpp
Orientation GetOrientation (bool b)
{
  int posOne = 1;
  int posTwo = 2;
  return b ? posOne : posTwo;    // V2022
}
```

В этом примере функция использует условный оператор \(?:\) для выбора между двумя целочисленными переменными 'posOne' и 'posTwo', что также приводит к неявному приведению\.

**Пример N4:**

```cpp
void foo2(Orientation o){}

void foo3()
{
  foo2(Horizontal);                 //ok
  foo2(Horizontal | Vertical);      // V2022
}
```

В результате операции 'Horizontal \| Vertical' получается целое число, представляющее побитовый результат\. При передаче этого значения в функцию 'foo2', принимающую аргумент типа 'Orientation', происходит неявное приведение типов, что может привести к передаче недопустимого значения\.