Что происходит, когда вы печатаете

gcc main.c

в командную строку и нажмите Enter?

Давайте разберемся!

Во-первых, какую команду и файл мы используем/работаем? Это говорит оболочке запустить команду «gcc» для файла «main.c».

Расширение «.c» в этом файле позволяет нам (и операционной системе) знать, что данные в файле находятся на языке программирования C.

Команда «gcc» — это компилятор Linux для проектов GNU на языках C и C++. Это означает, что команду «gcc» можно использовать для файлов с расширением «.c».

Фантастика, «gcc» скомпилирует «main.c»! Но ждать. Что такое компилятор??

Компилятор

Компилятор преобразует исходный код, написанный на языке программирования (например, C), в другой язык программирования, который может использовать операционная система (обычно двоичный).

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

Препроцессор

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

Допустим, в нашем файле main.c есть следующие данные:

#include <stdio.h>
int main(void)
{
printf("Hello\n");
return (0);
}

Если мы пропустим этот исходный код через препроцессор, препроцессор преобразует его в следующие данные и отправит компилятору:
(Обратите внимание, это только первые 10 строк данных для примера.)

Компилятор

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

Ассемблерный код — это язык программирования низкого уровня, в котором структуры и команды соответствуют машинному языку, но вместо чисел используются имена. (Это облегчает программистам работу и понимание.)

Если мы продолжим цепочку компиляции и отправим наши данные предварительной обработки через компилятор, мы получим от компилятора следующее:
(Примечание: для примера показаны только первые 10 строк.)

Собрать

Как только компилятор создает ассемблерный код, ассемблерная часть процесса берет ассемблерный код и преобразует его в объектный код.

Объектный код — это в основном данные на компьютерном языке, таком как двоичный код.

После сборки наши данные main.c будут выглядеть так:

Линкер

Как только компоновщику предоставлен объектный код, он берет эти данные и связывает их с соответствующими библиотеками для создания и выполнения программы. Если для исполняемого файла не указано конкретное имя файла, имя файла по умолчанию — «a.out».

Чего мы ожидаем?

Изучив всю эту информацию, если мы запустим «gcc main.c», мы должны ожидать создания нового исполняемого файла с именем «a.out» в нашем текущем каталоге.

Посмотрим!

  1. Запустите «gcc main.c» в нашем текущем каталоге:

2. Используйте команду «ls -l», чтобы проверить, был ли создан и исполняемый файл «a.out»:

Как мы видим, файл «a.out» существует, и его разрешения «-rwxrwxr-x», показывающие, что файл является исполняемым для владельца файла, группы файла и всех других пользователей.

Есть много разных опций для команды gcc; мы рассмотрели только самую простую форму этой команды. Смело смотрите другие варианты здесь и думайте, как и зачем вы будете использовать их в своей системе.

До следующего раза, расшифруйте прочь!