Что происходит, когда вы запускаете «gcc main.c»?

Что происходит, когда вы запускаете «gcc main.c»?

Когда вы запустите gcc main.c, исполняемый файл с именем a.out появится в каталоге, в котором вы находитесь. Что происходит между запуском команды и получением исполняемого файла?

На изображении выше показано шаг за шагом, что происходит при выполнении команды gcc. С правой стороны мы видим, что выполнение команды gcc main.c даст нам файл с именем a.out (при условии, что в нашем текущем каталоге у нас есть файл main.c с кодом c). Слева от него у нас есть четыре этапа процесса: препроцессор, компилятор, ассемблер и компоновщик.

Препроцессор: этот шаг берет наш исходный код (в данном случае это main.c) и сначала удаляет все комментарии из кода. После этого он включит коды заголовочных файлов (#include вверху) в исходный код. На изображении внизу показано, как выглядят комментарии (темно-синий шрифт) и код заголовочного файла (#include вверху).

Компилятор: после того, как препроцессор передает обработанный код, компилятор транслирует исходный код в ассемблерный код. Это инструкции, определенные на английском языке, такие как printf.

Ассемблер. После того, как исходный код переведен в ассемблерный код, компилятор передает его ассемблеру. Что делает ассемблер, так это то, что он преобразует ассемблерный код в объектный код, более известный как двоичный код (0 и 1). Двоичный код — это язык, понятный компьютерам. Напомним: после того, как из исходного кода (main.c) были удалены комментарии и включены файлы заголовков, он переводится в ассемблерный код (инструкции, определенные на английском языке, такие как printf). После того, как он превратился в ассемблерный код, он преобразуется в объектный код (двоичный код).

Компоновщик. Наконец, ассемблер передает объектный код компоновщику, и компоновщик связывает имеющиеся у него библиотеки с объектным кодом. Примером библиотеки может быть функция квадратного корня (sqrt), которая взята из математической библиотеки C (math.h).

См. также:  LeetCode #590: Обход N-арного дерева в обратном порядке

После всего этого; от исходного кода к обработанному исходному коду, к ассемблерному коду, к объектному коду, к связыванию библиотек с объектным кодом. Исполняемый файл появится в вашем каталоге после запуска команды gcc main.c, как показано ниже (используя код c из изображения выше):

Понравилась статья? Поделиться с друзьями:
IT Шеф
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: