exponenta event banner

CERT C: DCL37-C правил

Не объявляйте и не определяйте зарезервированный идентификатор

Описание

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

Не объявляйте и не определяйте зарезервированный идентификатор. [1 ]

Внедрение Polyspace

Эта проверка проверяет наличие следующих проблем:

  • Определение и отмена определения зарезервированных идентификаторов или макросов.

  • Объявление зарезервированного идентификатора или имени макроса.

Примеры

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

Проблема

Проблема возникает при использовании #define и #undef по зарезервированному идентификатору или зарезервированному имени макроса.

Риск

Зарезервированные идентификаторы и зарезервированные имена макросов предназначены для использования реализацией. Удаление или изменение значения зарезервированного макроса может привести к неопределенному поведению. Это правило распространяется на следующее:

  • Идентификаторы или имена макросов, начинающиеся с подчеркивания

  • Идентификаторы в объеме файла, описанные в стандартной библиотеке C (ISO ®/IEC 9899:1999, раздел 7, «Библиотека»)

  • Названия макросов, описанные в библиотеке стандартов C, как определенные в заголовке стандарта (ISO/IEC 9899:1999, раздел 7, «Библиотека»).

Пример - Определение или отмена определения зарезервированных идентификаторов
#undef __LINE__               /* Non-compliant - begins with _ */
#define _Guard_H 1            /* Non-compliant - begins with _ */
#undef _ BUILTIN_sqrt        /* Non-compliant - implementation may
                               * use _BUILTIN_sqrt for other purposes,
                               * e.g. generating a sqrt instruction */
#define defined               /* Non-compliant - reserved identifier */
#define errno my_errno        /* Non-compliant - library identifier */
#define isneg(x) ( (x) < 0 )  /* Compliant - rule doesn't include  
                               * future library directions   */
Проблема

Проблема возникает при объявлении зарезервированного идентификатора или имени макроса.

При определении имени макроса, соответствующего стандартному макросу, объекту или функции библиотеки, Polyspace ® считает это нарушением правила.

Правило рассматривает предварительные определения в качестве определений.

Риск

Стандарт позволяет реализациям обрабатывать зарезервированные идентификаторы специально. При повторном использовании зарезервированных идентификаторов можно вызвать неопределенное поведение.

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

Группа: Правило 02. Объявления и инициализация (DCL)
Представлен в R2019a

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

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

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