Защита заголовочного файла (хедера) от повторного включения — это важная практика в C/C++, предотвращающая ошибки компиляции из-за множественного определения одних и тех же сущностей.
Используются include guards (стражники включения) или #pragma once.
#ifndef UNIQUE_IDENTIFIER_H
#define UNIQUE_IDENTIFIER_H
// Содержимое заголовочного файла
#endif // UNIQUE_IDENTIFIER_H
Как это работает:
UNIQUE_IDENTIFIER_H
не определён, поэтому код выполняется.Рекомендации:
PROJECT_PATH_FILE_H
).#pragma once
// Содержимое заголовочного файла
Преимущества:
Недостатки:
Критерий | Include Guards | #pragma once |
---|---|---|
Стандарт | Да (C/C++) | Нет |
Надёжность | Высокая | Высокая* |
Удобство | Громоздко | Лаконично |
*В исключительных случаях (например, символьные ссылки в файловой системе) #pragma once
может дать сбой.
#pragma once
#ifndef FALLBACK_GUARD_H
#define FALLBACK_GUARD_H
// Код
#endif
Зачем?
#pragma once
для удобства и скорости.Резюмируем: всегда защищайте заголовочные файлы! Для большинства проектов достаточно #pragma once
, но в критически важных системах можно добавить и классические Include Guards для максимальной надёжности.