Процесс компиляции C
Что происходит, когда пользователь Linux вводит gcc main.c
в оболочку Linux и нажимает Enter? Как и в моей предыдущей статье о командах, подстановочных знаках и именах файлов, давайте начнем с синтаксиса. Здесь main.c
относится к имени файла, оканчивающемуся на расширение .c
, что означает, что он написан на языке программирования C.
Программирование C и языки высокого уровня
C — это язык программирования высокого уровня, что означает, что он абстрагирует многие детали базового механизма компьютерных систем и требует меньше знаний для написания кода, чем сложные языки низкого уровня, такие как ассемблер и двоичные (1 и 0).
Однако для выполнения файлы, написанные на языках высокого уровня, таких как main.c
, должны сначала пройти процесс, называемый компиляцией, во время которого они преобразуются обратно в 1 и 0, понятные самой машине. Одна команда Linux, способная компилировать многие языки высокого уровня, — это gcc
, что означает GNU Compiler Collection. В оболочку, набрав:
gcc main.c
это все равно, что сказать: «преобразовать основной файл C в машиночитаемый двоичный файл».
Четыре этапа компиляции
Процесс компиляции состоит из четырех этапов, первый из которых называется препроцессором. Здесь из файла удаляются все комментарии (текст, заключенный в /*
и */
). Препроцессор также заменяет теги для файлов заголовков .h
, а также имена макросов фактическим кодом, который они представляют.
Второй этап называется компилятором. Компилятор переводит файл C в «код ассемблера», ныне эзотерический язык, на котором был написан исходный компилятор C. Как только файл переведен в
код ассемблера, Ассемблер преобразует его в «объектный код», также известный как «машинный код» или двоичный код.
Последний этап процесса компиляции известен как Linker. Написание программы на C обычно требует разделения текста на несколько файлов .c, чтобы сохранить организованность. Компоновщик объединяет эти теперь «объектные» файлы вместе со всеми библиотечными файлами, упомянутыми в заголовке, в одну исполняемую программу.
gcc main.c
Когда пользователь Linux вводит gcc main.c
в оболочку и нажимает Enter, файл main.c компилируется gcc
в один исполняемый документ. Однако при отсутствии указанного имени файла для этого нового исполняемого файла ему автоматически присваивается имя «a.out», если пользователь введет:
gcc main.c -o a_better_time
тогда у них может быть a_better_time
.
В жизни есть нечто большее, чем код. Проверьте внизу моих блогов рекомендацию об убийственной песне: