Процесс компиляции 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.



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