# V556. Values of different enum types are compared.

Анализатор обнаружил потенциально возможную ошибку, связанную с тем, что в коде сравниваются enum значения, имеющие разные типы.

Пример:

    enum ErrorTypeA { E_OK, E_FAIL };
    enum ErrorTypeB { E_ERROR, E_SUCCESS };
    void Foo(ErrorTypeB status) {
      if (status == E_OK)
      { ... }
    }

В сравнении случайно использовано неверное имя, и логика работы программы будет нарушена. Корректный вариант:

    void Foo(ErrorTypeB status) {
       if (status == E_SUCCESS)
      { ... }
    }

Сравнение значений различных типов перечислений (enum) не обязательно является ошибкой. Но подобный код нуждается в проверке (code review).

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

CWE-697 CERT-MSC01-C

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V556.