Skip to the content.

Компилятор g++


Компилятор g++ содержит в себе: препроцессор, ассемблер, линковщик (ld).

Этапы компиляции (хороший видеоурок)

  1. Препроцессинг (-E) - убирает комментарии, вставляет файлы заголовков (#include заменяет на содержимое подключаемых файлов), обрабатывает директивы условной компиляции (#define, #if, #ifdef и #ifndef). Более того файлы заголовков тоже рекурсивно проходят препроцессинг. Препроцессор работает с кодом на С++ как с обычным текстом и ничего не знает о его синтаксисе (язык препроцессора - это специальный яп, встроенный в С++). Результат: file.ii
  2. Трансляция/Компиляция (-S) в АСМ код. Результат: file.s
  3. Ассемблирование (-c) в объектный файл. Результат: file.o
  4. Линковка/Компоновка объектных файлов в исполняемый (он требуется даже если программа состоит из одного файла)

Единица трансляции - подаваемый на вход компилятора .cpp файл со всеми включёнными в него файлами (.hpp).

Таблица символов — это структура данных, создаваемая самим компилятором и хранящаяся в самих объектных файлах. Таблица символов хранит имена переменных, функций, классов, объектов и т.д., где каждому идентификатору соотносится его тип, область видимости. Также таблица символов хранит адреса ссылок на данные и процедуры в других объектных файлах. С её помощью линковщик строит связи между множеством объектных файлов и создаёт единый исполняемый файл.

Стандарты С++

Ключи