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