logo

Процес компилације у в

Шта је компилација?

Компилација је процес претварања изворног кода у објектни код. То се ради уз помоћ компајлера. Компајлер проверава изворни код за синтаксичке или структурне грешке, и ако је изворни код без грешака, онда генерише објектни код.

Процес састављања у в

Процес компилације ц конвертује изворни код узет као улаз у објектни или машински код. Процес компилације се може поделити у четири корака, тј. претходна обрада, компајлирање, асемблирање и повезивање.

Предпроцесор узима изворни код као улаз и уклања све коментаре из изворног кода. Препроцесор узима директиву претпроцесора и тумачи је. На пример, ако , директива је доступна у програму, затим претпроцесор тумачи директиву и замењује ову директиву садржајем 'стдио.х' фајл.

кружно заказивање

Следе фазе кроз које наш програм пролази пре него што се трансформише у извршни облик:

    Препроцесор Цомпилер асемблер Линкер
Процес састављања у в

Препроцесор

Изворни код је код који је написан у уређивачу текста, а фајл изворног кода има екстензију '.ц'. Овај изворни код се прво прослеђује претпроцесору, а затим предпроцесор проширује овај код. Након проширења кода, проширени код се прослеђује компајлеру.

Цомпилер

Код који проширује претпроцесор се прослеђује компајлеру. Компајлер претвара овај код у асемблерски код. Или можемо рећи да Ц компајлер претвара претходно обрађени код у асемблерски код.

асемблер

Асемблерски код се конвертује у објектни код коришћењем асемблера. Име објектне датотеке коју генерише асемблер је исто као и изворна датотека. Екстензија објектне датотеке у ДОС-у је '.обј', ау УНИКС-у екстензија је 'о'. Ако је назив изворне датотеке 'здраво Ц', тада би име објектне датотеке било 'хелло.обј'.

Линкер

Углавном, сви програми написани у Ц-у користе функције библиотеке. Ове библиотечке функције су унапред компајлиране, а објектни код ових датотека библиотеке се чува са екстензијом '.либ' (или '.а'). Главни рад повезивача је да комбинује објектни код датотека библиотеке са објектним кодом нашег програма. Понекад се јавља ситуација када се наш програм позива на функције дефинисане у другим датотекама; онда линкер игра веома важну улогу у томе. Он повезује објектни код ових датотека са нашим програмом. Стога закључујемо да је посао повезивача да повеже објектни код нашег програма са објектним кодом датотека библиотеке и других датотека. Излаз линкера је извршна датотека. Име извршне датотеке је исто као и изворне датотеке, али се разликује само по екстензијама. У ДОС-у, екстензија извршне датотеке је '.еке', ау УНИКС-у, извршна датотека може бити именована као 'а.оут'. На пример, ако користимо функцију принтф() у програму, онда линкер додаје свој придружени код у излазну датотеку.

Хајде да разумемо кроз пример.

здраво Ц

 #include int main() { printf('Hello javaTpoint'); return 0; } 

Сада ћемо направити дијаграм тока горњег програма:

Процес састављања у в

У горњем дијаграму тока, следећи кораци су предузети да би се програм извршио:

  • Прво, улазна датотека, тј. здраво Ц, се прослеђује претпроцесору, а претпроцесор претвара изворни код у проширени изворни код. Проширење проширеног изворног кода би било Здраво, ја.
  • Проширени изворни код се прослеђује компајлеру, а компајлер претвара овај проширени изворни код у асемблерски код. Проширење скупштинског кода би било хелло.с.
  • Овај асемблерски код се затим шаље асемблеру, који конвертује асемблерски код у објектни код.
  • Након креирања објектног кода, линкер креира извршну датотеку. Учитавач ће затим учитати извршну датотеку за извршење.