В C++, какова цель защиты заголовка в программе C++.
От сети я нашел, что это для предотвращения включая файлы снова и снова, но как заголовок охраняет, гарантируют это.
Заголовок защиты (или, более условно, «включающая защита») предназначен для предотвращения проблем, если файл заголовка включен более одного раза; например
#ifndef MARKER
#define MARKER
// declarations
#endif
В первый раз, когда этот файл будет #include
-ed, символ препроцессора MARKER
будет неопределенным, поэтому препроцессор определит символ, и следующие объявления будут включены в исходный код, видимый компилятором. При последующих #include
будет определен символ МАРКЕР
, и, следовательно, все в пределах #ifnde
/ #endif
будет удаляется препроцессором.
Чтобы это работало правильно, символ МАРКЕР
должен отличаться для каждого файла заголовка, который, возможно, имеет значение #include
-ed.
Причина, по которой такие вещи необходимы, заключается в том, что в C / C ++ запрещено определять тип или функцию с одним и тем же именем более одного раза в единице компиляции. Защита позволяет файлу заголовка # включать
другие файлы заголовков, не беспокоясь о том, что это может привести к тому, что некоторые объявления будут включены несколько раз.
Короче говоря, это не препятствует тому, что вы #include
снова и снова загружаете файл. Скорее, он позволяет сделать это , не вызывая ошибок компиляции .
Цель защит заголовков - предотвратить проблемы, когда некоторый код может появиться только один раз в единице перевода.
Одним из примеров является структура. Вы не можете переопределить struct, даже если второе определение идентично. Поэтому, если вы попытаетесь скомпилировать следующее:
struct foo { int x; };
struct foo { int x; };
компилятор не справится из-за переопределения.
Может быть трудно гарантировать, что вы включаете заголовок только один раз (это происходит, когда заголовки включают другие заголовки). Если ваш заголовок имеет определение struct, это приведет к сбою компиляции. Защита заголовков - это простой трюк, благодаря которому даже если заголовок включается несколько раз, его содержимое появляется только один раз.