MISRA C:2012 Rule 8.12

В списке перечислителей значение неявно заданной постоянной перечисления должно быть уникальным

Описание

Определение правила

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

Объяснение

Неявно заданная константа перечисления имеет значение, больше, чем ее предшественник. Если первая константа перечисления неявно задана, то ее значение 0. Явно заданная константа перечисления имеет заданное значение.

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

Реализация Polyspace

Средство проверки правил помечает перечисление, если оно имеет неявно заданную константу перечисления с тем же значением, что и другая константа перечисления.

Дополнительное сообщение в отчете

Постоянная constant1 имеет то же значение, что и константа constant2.

Поиск и устранение проблем

Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».

Примеры

расширить все

enum color1 {red_1, blue_1, green_1};   /* Compliant */
enum color2 {red_2 = 1, blue_2 = 2, green_2 = 3};       /* Compliant */
enum color3 {red_3 = 1, blue_3, green_3};     /* Compliant */
enum color4 {red_4, blue_4, green_4 = 1};     /* Non Compliant */
enum color5 {red_5 = 2, blue_5, green_5 = 2};     /* Compliant */
enum color6 {red_6 = 2, blue_6, green_6 = 2, yellow_6};     /* Non Compliant */

Совместимые ситуации:

  • color1: Все константы неявно заданы.

  • color2: Все константы указаны явно.

  • color3: Хотя существует смесь неявных и явных спецификаций, все константы имеют уникальные значения.

  • color5: Неявно заданные константы имеют уникальные значения.

Несоответствующие ситуации:

  • color4Неявно заданная константа blue_4 имеет то же значение что и green_4.

  • color6Неявно заданная константа blue_6 имеет то же значение что и yellow_6.

Проверяйте информацию

Группа: Декларации и определения
Категория: Требуемая
Категория AGC: Требуется
Введенный в R2014b