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