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