Препроцессор должен использоваться только для безусловного и условного включения файлов и включать в себя охрану, и использовать конкретные директивы
Препроцессор должен использоваться только для безусловного и условного включения файлов и включать защитные элементы и использование конкретных директивных указаний.
Кроме безусловного и условного включения файлов и включения охранников, избегайте использования директивы препроцессора. Вместо этого используйте более безопасную альтернативу. Для образца:
Вместо:
#define MIN(a,b) ((a < b)? (a) : (b))
Вместо:
#define MAX_ARRAY_SIZE 1024U
В этих ситуациях директивы препроцессора не обеспечивают преимуществ, которые предоставляют альтернативы, таких как редактирование, проверка типа, перегрузка и так далее.
Проверка правил не позволяет использовать директивы препроцессора. Исключение составляют только:
#ifdef
, #ifndef
, #if
, #if defined
, #elif
, #else
и #endif
, только если используется для условного включения файлов и включать охрану.
#define
только если используется для определения макросов, используемых в средствах защиты включения. Например, в этом примере макрос __FILE_H__
не позволяет включать содержимое файла заголовка более одного раза:
/* aHeader.h */ #ifndef __FILE_H__ #define __FILE_H__ /* Contents of header file */ #endif
Когда #ifdef
, #define
и #endif
используются как ограждения включения в файл заголовка, все содержимое файла заголовка должно находиться в ограждении включения.
#include
Шашка не позволяет использовать #define
директивы в других контекстах. Если вы используете #define
-s в целях, отличных от включения охранников, выполните одно из следующих действий:
Чтобы задать макросы при компиляции кода, вместо #define
-s, используйте флаги компиляции (такие как опция GCC -D
). При запуске Polyspace® анализ, используйте эквивалентную опцию Polyspace Preprocessor definitions (-D)
.
Чтобы сохранить использование #define
в коде обосновать нарушение, используя комментарии в результатах или коде. Смотрите Адрес Результаты Polyspace через исправления ошибок или обоснования.
Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».
Группа: Директивы предварительной обработки |
Категория: Необходимый, Автоматизированный |