Выбор ответа Junior Сборка и линковка спрашивают часто обновлено

Зачем include guards

Вопрос

Для чего в заголовке пишут #pragma once или #ifndef X_H / #define X_H / #endif?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Чтобы заголовок не включился дважды в одну единицу трансляции. Один заголовок может прийти в .cpp разными путями через другие заголовки.

Варианты ответа

  1. Чтобы заголовок компилировался один раз на весь проект, а не в каждом .cpp
  2. Чтобы заголовок не включился дважды в одну единицу трансляцииправильный ответ
  3. Чтобы все функции из заголовка неявно стали inline и не конфликтовали
  4. Чтобы ускорить линковку: линковщик пропустит повторные символы

Разбор

Один заголовок может прийти в .cpp разными путями через другие заголовки. Без защиты определения классов окажутся в единице трансляции дважды, и это ошибка компиляции.

  • Между разными .cpp защита не действует: каждая единица трансляции включает заголовок заново (это решают предкомпилированные заголовки и модули).
  • inline защита не делает.
  • На линковку не влияет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.