Препроцессор должен только использоваться для безусловного и условного включения файла и включать защиту и использовать определенные директивы.
Препроцессор должен только использоваться для безусловного и условного включения файла и включать защиту и использовать определенные директивы.
Кроме безусловного и условного включения файла и включают защиту, избегают использования директив препроцессору. Используйте более безопасную альтернативу вместо этого. Например:
Вместо:
#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
Когда #ifdefDefine и #endif используются, как включают защиту в заголовочный файл, целое содержимое заголовочного файла должно быть во включать защите.
#include
Средство проверки не позволяет #define директивы в других контекстах. Если вы используете #define- s в целях кроме для включают защиту, выполнить одно из следующих действий:
Задавать макросы при компиляции кода, вместо #define- s, используйте флаги компиляции (такие как опция GCC -D). При выполнении анализа Polyspace® используйте эквивалентную опцию Polyspace Preprocessor definitions (-D).
Сохранить использование #define в вашем коде выровняйте по ширине нарушение с помощью комментариев в результатах или кода. Смотрите Результаты Polyspace Адреса Через Исправления ошибок или Выравнивания.
Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.
| Группа: Предварительная обработка директив |
| Категория: необходимый, автоматизированный |