Цель защиты Заголовка

В C++, какова цель защиты заголовка в программе C++.

От сети я нашел, что это для предотвращения включая файлы снова и снова, но как заголовок охраняет, гарантируют это.

10
задан alk 8 July 2019 в 06:01
поделиться

2 ответа

Заголовок защиты (или, более условно, «включающая защита») предназначен для предотвращения проблем, если файл заголовка включен более одного раза; например

#ifndef MARKER
#define MARKER
// declarations 
#endif

В первый раз, когда этот файл будет #include -ed, символ препроцессора MARKER будет неопределенным, поэтому препроцессор определит символ, и следующие объявления будут включены в исходный код, видимый компилятором. При последующих #include будет определен символ МАРКЕР , и, следовательно, все в пределах #ifnde / #endif будет удаляется препроцессором.

Чтобы это работало правильно, символ МАРКЕР должен отличаться для каждого файла заголовка, который, возможно, имеет значение #include -ed.

Причина, по которой такие вещи необходимы, заключается в том, что в C / C ++ запрещено определять тип или функцию с одним и тем же именем более одного раза в единице компиляции. Защита позволяет файлу заголовка # включать другие файлы заголовков, не беспокоясь о том, что это может привести к тому, что некоторые объявления будут включены несколько раз.


Короче говоря, это не препятствует тому, что вы #include снова и снова загружаете файл. Скорее, он позволяет сделать это , не вызывая ошибок компиляции .

21
ответ дан 3 December 2019 в 17:19
поделиться

Цель защит заголовков - предотвратить проблемы, когда некоторый код может появиться только один раз в единице перевода.

Одним из примеров является структура. Вы не можете переопределить struct, даже если второе определение идентично. Поэтому, если вы попытаетесь скомпилировать следующее:

struct foo { int x; };
struct foo { int x; };

компилятор не справится из-за переопределения.

Может быть трудно гарантировать, что вы включаете заголовок только один раз (это происходит, когда заголовки включают другие заголовки). Если ваш заголовок имеет определение struct, это приведет к сбою компиляции. Защита заголовков - это простой трюк, благодаря которому даже если заголовок включается несколько раз, его содержимое появляется только один раз.

2
ответ дан 3 December 2019 в 17:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: