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