Включайте защиту, буду обеспечен
Включайте защиту, буду обеспечен.
Когда модуль перевода содержит комплексную иерархию вложенных заголовочных файлов, для конкретного заголовочного файла возможно быть включенным несколько раз, ведя к беспорядку. Если это несколько, включение производит несколько или конфликтные определения, то ваша программа может иметь неопределенное или ошибочное поведение.
Например, предположите, что заголовочный файл содержит:
#ifdef _WIN64 int env_var; #elseif long int env_var; #endif
_WIN64
и другой, который не задает его, у вас могут быть конфликтные определения env_var
.Чтобы избежать нескольких включение того же файла, добавьте, включают защиту в начало заголовочных файлов. Используйте любой из этих форматов:
<start-of-file> // Comments allowed here #if !defined ( identifier ) #define identifier // Contents of file #endif <end-of-file>
<start-of-file> // Comments allowed here #ifndef identifier #define identifier // Contents of file #endif <end-of-file>
Средство проверки повышает нарушение, если заголовочный файл не содержит включать защиту.
Например, этот код использует включать защиту для #define
и #include
операторы. Этот код не нарушает правило:
// Contents of a header file #ifndef FILE_H #define FILE_H #include "libFile.h" #endif
Вы можете по ошибке использовать различные идентификаторы в #ifndef
и #define
операторы:
#ifndef MACRO #define MICRO //... #endif
Вы можете непреднамеренно использовать #ifdef
вместо #ifndef
или не используйте #define
оператор.
Если вы ожидаете нарушение правила, но не видите его, относитесь, чтобы Диагностировать, Почему Кодирующие Стандартные Нарушения Не Появляются как ожидалось.
Группа: предварительная обработка директив |
Категория: необходимый |