Unicorn with delicious cookie
Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
>
>
>
V2552. MISRA. Expressions with enum...
menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

V2552. MISRA. Expressions with enum underlying type should have values corresponding to the enumerators of the enumeration.

22 Авг 2019

Данное диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.

Анализатор обнаружил опасное приведение числа к перечислению. Указанное число может не входит в диапазон значений enum.

Пример:

enum TestEnum { A, B, C };
TestEnum Invalid = (TestEnum)42;

Так как стандарт не указывает базовый тип для enum, то результат приведения числа, чьё значение не входит диапазон элементов enum, является unspecified behavior до C++17 и undefined behavior начиная с C++17.

Для того чтобы этого избежать, необходимо проверять числа перед приведениями. Как вариант, можно явно указать базовый тип для enum или использовать 'enum class', базовый тип которого по умолчанию - 'int'.

Корректный код:

enum TestEnum { A, B, C, Invalid = 42 };

Или:

enum TestEnum : int { A, B, C };
E Invalid = (E)42;

Или:

enum class TestEnum { A, B, C };
TestEnum Invalid = (TestEnum)42;

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

  • MISRA-CPP-7.2.1