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 подскажет развёрнутый ответ в реальном времени.