@Anther
Начинающий

Include/header guards зачем?

Зачем нужны header guards если в заголовочных файлах мы пишем только объявление функции? То есть зачем нужно ограничивать множественное объявление, если это почти не влияет на программу?

#ifndef SOME_UNIQUE_NAME_HERE
#define SOME_UNIQUE_NAME_HERE
 
// Здесь только заголовок. Без определения. 
 
#endif
  • Вопрос задан
  • 682 просмотра
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Зачем нужны header guards если в заголовочных файлах мы пишем только объявление функции?

Не всегда мы пишем только объявления. Иногда мы там пишем определения, например определяем структуры, или псевдонимы типов (typedef). Повторное определение таких вещей -- ошибка. Тут ты можешь сказать: "но я подключаю хедер в каждый исходник только один раз". Да, пока проект простой можно это отследить. Но когда одни хедеры начинают подключать другие хедеры это становится делать сложнее. header guards упрощают развитие проекта.
Иногда между хедерами бывают циклические зависимости, header guards позволяют разорвать цикл.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
vabka
@vabka
Токсичный шарпист
Чтобы случайно файл не был заинклюден дважды.
В общем случае это может привести к ошибке компиляции.
Ответ написан
Комментировать
hottabxp
@hottabxp
Сначала мы жили бедно, а потом нас обокрали..
Вот отличное объяснение - Header guards
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы