Compilation process in C
What is a compilation?
koostaminen on prosessi, jossa lähdekoodi muunnetaan objektikoodiksi. Se tehdään kääntäjän avulla. Kääntäjä tarkistaa lähdekoodista syntaktiset tai rakenteelliset virheet, ja jos lähdekoodi on virheetön, se luo objektikoodin.
the C compilation process muuntaa syötteenä otetun lähdekoodin objektikoodiksi tai konekoodiksi. Kokoamisprosessi voidaan jakaa neljään vaiheeseen, ts., Esikäsittely, kokoaminen, kokoaminen, ja linkittäminen.
esiprosessori ottaa lähdekoodin syötteeksi ja poistaa kaikki kommentit lähdekoodista. Esiprosessori ottaa esiprosessoridirektiivin ja tulkitsee sen. Esimerkiksi, jos <stdio.h>, direktiivi on saatavilla ohjelmassa, sitten esiprosessori tulkitsee direktiiviä ja korvaa tämän direktiivin ” stdion sisällöllä.H-tiedosto.
seuraavat ovat vaiheet, joiden läpi ohjelmamme kulkee ennen kuin se muutetaan suoritettavaan muotoon:
- Esikäsittelijä
- Kääntäjä
- Assembler
- Linker
Esikäsittelijä
lähdekoodi on tekstieditorissa kirjoitettu koodi ja lähde kooditiedostolle annetaan laajennus “.”. Tämä lähdekoodi siirretään ensin esiprosessorille, minkä jälkeen esiprosessori laajentaa tätä koodia. Koodin laajentamisen jälkeen laajennettu koodi siirtyy kääntäjälle.
Kääntäjä
esikäsittelijän laajentama koodi siirtyy kääntäjälle. Kääntäjä muuntaa tämän koodin assembly-koodiksi. Tai voimme sanoa, että C-kääntäjä muuntaa esikäsitellyn koodin assembly-koodiksi.
Assembler
assembler-koodi muutetaan objektikoodiksi assemblerin avulla. Assemblerin luoman oliotiedoston nimi on sama kuin lähdetiedoston. Oliotiedoston laajennus DOS: ssa on”.obj,’ ja Unixissa laajennus on “o”. Jos lähdetiedoston nimi on ” hello.c’, jolloin objektitiedoston nimi olisi ‘ Hei.obj”.
Linker
pääasiassa kaikki C-kielellä kirjoitetut ohjelmat käyttävät kirjastofunktioita. Nämä kirjastofunktiot ovat valmiiksi koottuja,ja näiden kirjastotiedostojen objektikoodi tallennetaan”.lib” (tai”.a’) laajennus. Linkittäjän päätyö on yhdistää kirjastotiedostojen objektikoodi ohjelmamme objektikoodiin. Joskus tilanne syntyy, kun ohjelmamme viittaa muissa tiedostoissa määriteltyihin funktioihin; silloin linkerillä on tässä erittäin tärkeä rooli. Se yhdistää näiden tiedostojen kohdekoodin ohjelmaamme. Siksi päätämme, että linkittäjän tehtävä on yhdistää ohjelmamme objektikoodi kirjastotiedostojen ja muiden tiedostojen objektikoodiin. Linkkerin ulostulo on suoritettava tiedosto. Suoritettavan tiedoston nimi on sama kuin lähdetiedoston, mutta eroaa vain niiden laajennuksista. DOS: ssa suoritettavan tiedoston laajennus on”.exe’, ja Unixissa suoritettavan tiedoston nimi voi olla “a.out”. Jos esimerkiksi käytämme printf () – toimintoa ohjelmassa, linkittäjä lisää siihen liittyvän koodin tulostiedostoon.
ymmärretään esimerkin kautta.
Haloo.c
nyt luodaan vuokaavio yllä olevasta ohjelmasta:
yllä olevassa vuokaaviossa tehdään seuraavat vaiheet ohjelman toteuttamiseksi:
- ensinnäkin, syötetiedosto, eli, Hei.c, siirretään esiprosessorille, ja esiprosessori muuntaa lähdekoodin laajennetuksi lähdekoodiksi. Laajennetun lähdekoodin laajennus olisi hello.i.
- laajennettu lähdekoodi siirtyy kääntäjälle, ja kääntäjä muuntaa tämän laajennetun lähdekoodin assembly-koodiksi. Kokoonpanotunnuksen laajennus olisi hello.s.
- tämä assembly-koodi lähetetään assemblerille, joka muuntaa assembly-koodin objektikoodiksi.
- oliokoodin luomisen jälkeen linkittäjä luo suoritettavan tiedoston. Tämän jälkeen lataaja lataa suoritettavan tiedoston suoritusta varten.