мета-данные страницы
  •  

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
glossary:prog:compilation [2025/09/25 18:24] radi0devglossary:prog:compilation [2025/11/09 12:07] (текущий) – внешнее изменение A User Not Logged in
Строка 22: Строка 22:
 **Препроцессор** - это //макро процессор//, который преобразовывает вашу программу для дальнейшего компилирования. На данной стадии происходит происходит работа с препроцессорными директивами. Например, препроцессор добавляет (''#include'') хэдеры в код, убирает комментарии, заменяет макросы (''#define'') их значениями, выбирает нужные куски кода в соответствии с условиями ''#if'', ''#ifdef'' и ''#ifndef''. **Препроцессор** - это //макро процессор//, который преобразовывает вашу программу для дальнейшего компилирования. На данной стадии происходит происходит работа с препроцессорными директивами. Например, препроцессор добавляет (''#include'') хэдеры в код, убирает комментарии, заменяет макросы (''#define'') их значениями, выбирает нужные куски кода в соответствии с условиями ''#if'', ''#ifdef'' и ''#ifndef''.
  
-Хэдеры, включенные в программу с помощью директивы `#include`, рекурсивно проходят стадию препроцессинга и включаются в выпускаемый файл. Однако, каждый хэдер может быть открыт во время препроцессинга несколько раз, поэтому, обычно, используются специальные препроцессорные директивы, предохраняющие от циклической зависимости.+Хэдеры, включенные в программу с помощью директивы ''#include'', рекурсивно проходят стадию препроцессинга и включаются в выпускаемый файл. Однако, каждый хэдер может быть открыт во время препроцессинга несколько раз, поэтому, обычно, используются специальные препроцессорные директивы, предохраняющие от циклической зависимости.
  
-==== Компиляция ====+файлы программы проходят препроцессинг независимо друг от друга.
  
-На данном шаге компилятор выполняет свою главную задачу - компилирует, то есть преобразует полученный на прошлом шаге код без директив в /ссемблерный код//. Это промежуточный шаг между высокоуровневым языком и машинным (бинарным) кодом.+==== Компиляция / Ассемблирование ====
  
-==== Ассемблирование ====+Сначала файлы, прошедшие препроцессинг проходят через лексический анализатор, выявляющий синтаксические ошибки. Если ошибок нет - файлы передаються компилятору. 
 + 
 +На данном шаге компилятор выполняет свою главную задачу - компилирует, то есть преобразует полученный на прошлом шаге код без директив в //ассемблерный код//. Это промежуточный шаг между высокоуровневым языком и машинным (бинарным) кодом.
  
 Так как x86 процессоры исполняют команды на бинарном коде, необходимо перевести ассемблерный код в машинный с помощью **ассемблера**. Ассемблер преобразовывает ассемблерный код в машинный код, сохраняя его в **объектном файле**. Так как x86 процессоры исполняют команды на бинарном коде, необходимо перевести ассемблерный код в машинный с помощью **ассемблера**. Ассемблер преобразовывает ассемблерный код в машинный код, сохраняя его в **объектном файле**.
Строка 36: Строка 38:
 Далее возможно сохранение данного объектного кода в **статические библиотеки** для того, чтобы не компилировать данный код снова. Далее возможно сохранение данного объектного кода в **статические библиотеки** для того, чтобы не компилировать данный код снова.
  
-==== Компоновка ====+==== Компоновка / Линковка ====
  
-Объектных файлов может быть много и нужно их всех соединить в единый исполняемый файл с помощью компоновщика (линкера). Он связывает все объектные файлы и статические библиотеки в единый исполняемый файл, который мы и сможем запустить в дальнейшем. Для того, чтобы понять как происходит связка, следует рассказать о //таблице символов//.+Объектных файлов может быть много и нужно их всех соединить в единый исполняемый файл с помощью компоновщика (линкера). Он связывает все объектные файлы и статические библиотеки в единый исполняемый файл, который мы и сможем запустить в дальнейшем. Для того, чтобы понять как происходит связка, следует рассказать о //таблице символов//. Линкер добавляет только те реализации библиотечных ф-ий, которые используються в программе.