Выбор ответа Junior Сборка и линковка спрашивают часто обновлено
Зачем include guards
Вопрос
Для чего в заголовке пишут #pragma once или #ifndef X_H / #define X_H / #endif?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Чтобы заголовок не включился дважды в одну единицу трансляции. Один заголовок может прийти в .cpp разными путями через другие заголовки.
Варианты ответа
- Чтобы заголовок компилировался один раз на весь проект, а не в каждом
.cpp - Чтобы заголовок не включился дважды в одну единицу трансляцииправильный ответ
- Чтобы все функции из заголовка неявно стали
inlineи не конфликтовали - Чтобы ускорить линковку: линковщик пропустит повторные символы
Разбор
Один заголовок может прийти в .cpp разными путями через другие заголовки. Без защиты определения классов окажутся в единице трансляции дважды, и это ошибка компиляции.
- Между разными
.cppзащита не действует: каждая единица трансляции включает заголовок заново (это решают предкомпилированные заголовки и модули). - inline защита не делает.
- На линковку не влияет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.