Препроцессор должен только использоваться для безусловного и условного включения файла и включать защиту и использовать определенные директивы
Препроцессор должен только использоваться для безусловного и условного включения файла и включать защиту и использовать определенные директивы.
Кроме безусловного и условного включения файла и включают защиту, избегают использования директив препроцессору. Используйте более безопасную альтернативу вместо этого. Например:
Вместо:
#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 Адреса Через Исправления ошибок или Выравнивания.
Если вы ожидаете нарушение правила, но не видите его, относитесь, чтобы Диагностировать, Почему Кодирующие Стандартные Нарушения Не Появляются как ожидалось.
Группа: Предварительная обработка директив |
Категория: необходимый, автоматизированный |