Препроцессор должен только использоваться в безусловном и условном включении файла и включать защиту и использовать определенные директивы.
Препроцессор должен только использоваться в безусловном и условном включении файла и включать защиту и использовать следующие директивы: (1) #ifndef
, (2) #ifdef
, (3) #if
, (4) #if defined
, (5) #elif
, (6) #else
, (7) #define
, (8) #endif
, (9) #include
.
Кроме безусловного и условного включения файла и включают защиту, избегают использования директив препроцессору. Используйте более безопасную альтернативу вместо этого. Например:
Вместо:
#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 Адреса Через Исправления ошибок или Выравнивания.
Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.
Группа: Предварительная обработка директив |