Include guard
В языках программирования Си и C++ #include guards (защита подключения), иногда также называемая macro guard (макрозащита) — это особая конструкция, применяемая для избежания проблем с «двойным подключением» при использовании директивы компилятора Двойное подключениеСледующий фрагмент кода на языке Си демонстрирует потенциальные проблемы, которые могут возникнуть, если пропустить #include guards:
struct foo {
int member;
};
#include "grandfather.h"
#include "grandfather.h"
#include "father.h"
Здесь к файлу «child.c» напрямую подключаются две копии заголовочного файла «grandfather.h». Это может вызвать ошибку компиляции, так как структура типа Применение #include guards
#ifndef H_GRANDFATHER
#define H_GRANDFATHER
struct foo {
int member;
};
#endif
#include "grandfather.h"
#include "grandfather.h"
#include "father.h"
В данном примере первое включение файла «grandfather.h» делает идентификатор макроса Проблемы использованияЧтобы #include guards работали корректно, в каждом из них должен использоваться (проверяться и определяться) свой уникальный идентификатор макроса препроцессора. Поэтому в проекте с использованием #include guards должна соблюдаться единая система назначения имён идентификаторам макросов и все используемые идентификаторы не должны пересекаться (совпадать) как друг с другом, так и с идентификаторами из используемых в проекте сторонних заголовочных файлов и идентификаторами макросов с глобальной видимостью. Для решения этих проблем в большинстве реализаций языков Си и C++ поддерживается нестандартная директива См. такжеДополнительные источники |
Portal di Ensiklopedia Dunia