Easyкомпиляция
Чем отличаются компилятор, линкер и препроцессор?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Препроцессор обрабатывает директивы #include, #define, условную компиляцию (работает с текстом до синтаксического анализа). Компилятор переводит каждый TU в объектный файл: парсит, проверяет типы, оптимизирует. Линкер соединяет несколько объектных файлов и библиотек в исполняемый файл.
#define MAX 10 // препроцессор
int square(int x); // объявление — для компилятора
int main() { return square(MAX); }
// square определён в другом .cpp → разрешил линкерПоэтому ошибки делятся на две категории: compile-time (до .o) и link-time (неразрешённые или повторные символы).
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.