Правило 8.12 MISRA C:2012

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

Описание

Управляйте определением

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

Объяснение

Неявно заданное постоянное перечисление имеет значение одно большее, чем его предшественник. Если первое постоянное перечисление неявно задано, то его значение 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: необходимый
Язык: C90, C99

Введенный в R2014b