Меры предосторожности должны быть приняты в порядке предотвратить содержимое заголовочного файла, включаемого несколько раз
Меры предосторожности должны быть приняты в порядке предотвратить содержимое заголовочного файла, включаемого несколько раз.
Когда модуль перевода содержит комплексную иерархию вложенных заголовочных файлов, для конкретного заголовочного файла возможно быть включенным несколько раз, ведя к беспорядку. Если это несколько, включение производит несколько или конфликтные определения, то ваша программа может иметь неопределенное или ошибочное поведение.
Например, предположите, что заголовочный файл содержит:
#ifdef _WIN64 int env_var; #elseif long int env_var; #endif
_WIN64
и другого, который не задает его, у вас могут быть конфликтные определения env_var
.Если вы включаете заголовочный файл, содержимое которого не охраняют от нескольких включение, анализ повышает нарушение этой директивы. Нарушение показывают в начале заголовочного файла.
Можно охранять содержимое заголовочного файла от нескольких включение при помощи одного из следующих методов:
<start-of-file> #ifndef <control macro> #define <control macro> /* Contents of file */ #endif <end-of-file>
<start-of-file> #ifdef <control macro> #error ... #else #define <control macro> /* Contents of file */ #endif <end-of-file>
Меры предосторожности должны быть приняты в порядке предотвратить содержимое заголовочного файла, включаемого несколько раз.
Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.
Группа: проект кода |
Категория: необходимый |
Категория AGC: необходимый |
Язык: C90, C99 |