Что происходит, когда вы набираете gcc main.c?

Вы когда-нибудь задумывались, что именно происходит, когда вы говорите своему компилятору скомпилировать ваш код?

Компилятор состоит из ряда различных компонентов, которые в конечном итоге преобразуют ваш код в язык, понятный компьютеру. Анатомия компилятора такова: препроцессор, компилятор, ассемблер и компоновщик. Давайте подробно рассмотрим путь, который проходит ваш исходный код, чтобы дать вам то, что вам нужно!

Препроцессор. Ваш исходный код сначала делает первую остановку в препроцессоре. Там будут удалены комментарии (/*пока комментарии!*/), которые были оставлены для других программистов. Затем он найдет все файлы заголовков, которые вы включили. Последняя задача препроцессора — заменить все имена макросов фактическим кодом.

Компилятор. После завершения этапа процессора исходный код отправляется в компилятор. Там он разбит на ассемблерный код. Весь ассемблерный код представляет собой набор небольших английских ключевых слов, называемых мнемоникой, которые читаются как инструкции для компьютера.

Ассемблер. Работа монтажника проста. Он превращает ассемблерный код в двоичный машинный язык или объектный код. Это визуально отображается как 1 и 0.

Линкер. Последней остановкой перед исходным кодом, который нужно посетить, прежде чем он станет исполняемым файлом, является компоновщик. На этом этапе компоновщик берет все модули, являющиеся c-файлами, и объединяет их в объектные файлы. Цель состоит в том, чтобы иметь один исполняемый файл. Компоновщик также берет функции, извлеченные из внешних библиотек, и связывает их с кодом. компоновщики делятся на две отдельные категории: статические компоновщики и динамические компоновщики.

ВУАЛЯ! Ваш исходный код теперь представляет собой исполняемый файл, файл .exe. А вы думали, что ваша работа программиста тяжела!