CERT C: Rec. INT09-C

Гарантируйте, что константы перечисления сопоставляют с уникальными значениями

Описание

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

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

Примеры

развернуть все

Описание

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

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

Риск

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

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

Группа: Rec. 04. Целые числа (INT)

Введенный в R2019a


[1]  Это программное обеспечение было создано MathWorks, включающим фрагменты: “Веб-сайт SEI CERT-C”, © 2017 Carnegie Mellon University, веб-сайт SEI CERT-C © 2017 Carnegie Mellon University”, CERT SEI C Кодирование Стандарта – Правил для Разработки безопасных, Надежных и Защищенных систем – 2 016 Выпусков”, © 2016 Carnegie Mellon University, and “CERT SEI Стандарт Кодирования C++ – Правил для Разработки безопасных, Надежных и Защищенных систем на C++ – 2 016 Выпусков” © 2016 Carnegie Mellon University, со специальным разрешением от его Института программной инженерии.

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

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