﻿# V6002\. The switch statement does not cover all values of the enum\.

Анализатор обнаружил оператор 'switch', в котором выбор варианта осуществляется по переменной enum\-типа\. При этом в операторе 'switch' используются не все элементы перечисления, что может свидетельствовать о наличии ошибки\.

Пример кода, в котором встретилась эта ошибка:

```cpp
enum Fruit { APPLE, BANANA, PEAR, PINEAPPLE, ORANGE }
int SomeMethod(Fruit fruit)
{
      int res = 0;
      switch (fruit)
      {
        case APPLE:
          res = calculate(10); break;
        case BANANA:
          res = calculate(20); break;
        case PEAR:
          res = calculate(30); break;
        case PINEAPPLE:
          res = calculate(40); break;
      }
      // code
      return res;
}
```

В данном случае перечисление 'Fruit' содержит 5 именованных констант, а оператор 'switch', выбор в котором осуществляется по данному перечислению, реализует выбор только по 4 из них\. Это место является потенциально ошибочным\.

Возможно, в ходе рефакторинга в перечисление добавили новую константу, но забыли реализовать выбор по ней в операторе 'switch', или же, что может быть в случае с большими перечислениями, константу банально могли пропустить\. В итоге пропущенное значение обрабатывается неправильно\. 

Тогда корректный код мог бы выглядеть следующим образом:

```cpp
int SomeMethod(Fruit fruit)
{
      int res = 0;
      switch (fruit)
      {
        case APPLE:
          res = calculate(10); break;
        case BANANA:
          res = calculate(20); break;
        case PEAR:
          res = calculate(30); break;
        case PINEAPPLE:
          res = calculate(40); break;
        case ORANGE:
          res = calculate(50); break;
      }
      // code
      return res;
}
```

Анализатор выдает предупреждение далеко не всегда, когда в 'switch' используется не все константы из перечисления\. Иначе, было бы слишком много ложных срабатываний\. Действует целый ряд исключений эмпирического типа\. Основные:

* Есть default\-ветка;
* Отсутствующая константа содержит в имени: None, Unknown и т\.п\.
* Отсутствующая константа самая последняя в enum и содержит в имени "end", "num", "count" и т\.п\.
* В перечислении всего 1 или 2 константы;
* И так далее\.