Препроцессор должен использоваться только для безусловного и условного включения файлов и включать защитные устройства, а также использовать специальные директивы
Препроцессор должен использоваться только для безусловного и условного включения файлов и включать защитные устройства, а также использовать специальные директивы.
Кроме безусловного и условного включения файлов и включения защитных элементов, избегайте использования директив препроцессора. Вместо этого используйте более безопасную альтернативу. Например:
Вместо:
#define MIN(a,b) ((a < b)? (a) : (b))
Вместо:
#define MAX_ARRAY_SIZE 1024U
В этих ситуациях директивы препроцессора не обеспечивают преимуществ, которые предоставляют альтернативы, такие как связывание, проверка типа, перегрузка и так далее.
Средство проверки правил не позволяет использовать директивы препроцессора. Единственными исключениями являются:
#ifdef, #ifndef, #if, #if defined, #elif, #else и #endif, только если используется для условного включения файлов и включает защитные средства.
#define только в том случае, если используется для определения макросов, используемых в защитных элементах include. Например, в этом примере макрос __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 ® используйте эквивалентную опцию PolyspacePreprocessor definitions (-D).
Сохранить использование #define в коде, обосновать нарушение с помощью комментариев в результатах или коде. См. раздел Результаты анализа пространства адресов с помощью исправлений ошибок или обоснований.
Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.
| Группа: Директивы предварительной обработки |
| Категория: Обязательно, Автоматизировано |