CERT C: Rec. INT09-C

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

Описание

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

Убедитесь, что константы перечисления сопоставлены с уникальными значениями.[1]

Реализация Polyspace

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

Примеры

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

Проблема

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

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

Риск

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

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

Пример - Репликация значения в неявно заданных константах перечисления
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.

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

Группа: Рек. 04. Целые числа (INT)
Введенный в R2019a

[1] Это программное обеспечение было создано MathWorks, включающее фрагменты: «Сайт SEI CERT-C», © 2017 Университет Карнеги Меллон, Веб-сайт SEI CERT-C + + © 2017 Университет Карнеги Меллон, "Стандарт кодирования SEI CERT C - Правила разработки безопасных, Надежные и безопасные системы - 2016 Edition ", © 2016 Университет Карнеги Меллон, и "Стандарт кодирования SEI CERT C++ - Правила разработки безопасных, Надежные и безопасные системы в C++ - 2016 Edition "© 2016 Университет Карнеги Меллон, с специального разрешения от его Института программной инженерии.

ЛЮБОЙ МАТЕРИАЛ УНИВЕРСИТЕТА КАРНЕГИ МЕЛЛОН И/ИЛИ ЕГО ИНЖЕНЕРНОГО ИНСТИТУТА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, СОДЕРЖАЩИЙСЯ В НАСТОЯЩЕМ ДОКУМЕНТЕ, ПОСТАВЛЯЕТСЯ НА БАЗИСЕ «КАК ЕСТЬ». УНИВЕРСИТЕТ КАРНЕГИ МЕЛЛОН НЕ ДАЕТ НИКАКИХ ГАРАНТИЙ, ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, В ОТНОШЕНИИ ЛЮБОГО ВОПРОСА, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИЮ ПРИГОДНОСТИ ДЛЯ ЦЕЛЕЙ ИЛИ КОММЕРЧЕСКОЙ ВЫГОДЫ, ИСКЛЮЧИТЕЛЬНОСТИ, ИЛИ УНИВЕРСИТЕТ КАРНЕГИ МЕЛЛОН НЕ ДАЕТ НИКАКИХ ГАРАНТИЙ В ОТНОШЕНИИ СВОБОДЫ ОТ ПАТЕНТА, ТОВАРНОГО ЗНАКА ИЛИ НАРУШЕНИЯ АВТОРСКИХ ПРАВ.

Это программное обеспечение и связанная с ним документация не были рассмотрены и не одобрены Университетом Карнеги-Меллон или его Институтом программной инженерии.