Mikä on kokoelma?
Kääntäminen on prosessi, jossa lähdekoodi muunnetaan objektikoodiksi. Se tehdään kääntäjän avulla. Kääntäjä tarkistaa lähdekoodin syntaktisten tai rakenteellisten virheiden varalta, ja jos lähdekoodi on virheetön, se luo objektikoodin.
c-käännösprosessi muuntaa syötteeksi otetun lähdekoodin objektikoodiksi tai konekoodiksi. Kokoonpanoprosessi voidaan jakaa neljään vaiheeseen, eli esikäsittelyyn, kääntämiseen, kokoamiseen ja linkitykseen.
Esiprosessori ottaa lähdekoodin syötteeksi ja poistaa kaikki kommentit lähdekoodista. Esiprosessori ottaa esiprosessoridirektiivin ja tulkitsee sen. Esimerkiksi jos , direktiivi on saatavilla ohjelmassa, esikäsittelijä tulkitsee direktiivin ja korvaa tämän direktiivin sisällöllä 'stdio.h' tiedosto.
java esimerkkiohjelmat
Seuraavat ovat vaiheet, joiden läpi ohjelmamme kulkee ennen kuin se muunnetaan suoritettavaan muotoon:
Esiprosessori
Lähdekoodi on koodi, joka on kirjoitettu tekstieditorilla ja lähdekooditiedostolle on annettu tunniste '.c'. Tämä lähdekoodi välitetään ensin esiprosessorille, jonka jälkeen esiprosessori laajentaa tämän koodin. Koodin laajentamisen jälkeen laajennettu koodi välitetään kääntäjälle.
Kääntäjä
Esiprosessorin laajentama koodi välitetään kääntäjälle. Kääntäjä muuntaa tämän koodin kokoonpanokoodiksi. Tai voimme sanoa, että C-kääntäjä muuntaa esikäsitellyn koodin kokoonpanokoodiksi.
Kokoonpanija
Kokoonpanokoodi muunnetaan objektikoodiksi assemblerin avulla. Kokoonpanijan luoman objektitiedoston nimi on sama kuin lähdetiedoston nimi. Objektitiedoston tunniste DOSissa on '.obj' ja UNIXissa tunniste 'o'. Jos lähdetiedoston nimi on 'hei C', silloin objektitiedoston nimi olisi 'hello.obj'.
Linkkeri
Pääasiassa kaikki C:llä kirjoitetut ohjelmat käyttävät kirjastotoimintoja. Nämä kirjastofunktiot on käännetty valmiiksi, ja näiden kirjastotiedostojen objektikoodit tallennetaan tunnisteella '.lib' (tai '.a'). Linkkerin päätehtävä on yhdistää kirjastotiedostojen objektikoodi ohjelmamme kohdekoodiin. Joskus tilanne syntyy, kun ohjelmamme viittaa muissa tiedostoissa määriteltyihin funktioihin; niin linkkerillä on tässä erittäin tärkeä rooli. Se linkittää näiden tiedostojen objektikoodin ohjelmaamme. Tästä syystä päättelemme, että linkittäjän tehtävänä on linkittää ohjelmamme objektikoodi kirjastotiedostojen ja muiden tiedostojen objektikoodiin. Linkittäjän tulos on suoritettava tiedosto. Suoritettavan tiedoston nimi on sama kuin lähdetiedoston nimi, mutta eroaa vain niiden tunnisteista. DOS:ssa suoritettavan tiedoston tunniste on '.exe', ja UNIXissa suoritettavan tiedoston nimi voidaan antaa nimellä 'a.out'. Jos esimerkiksi käytämme ohjelmassa printf()-funktiota, linkki lisää siihen liittyvän koodin tulostiedostoon.
Ymmärretään esimerkin kautta.
hei C
#include int main() { printf('Hello javaTpoint'); return 0; }
Nyt luomme vuokaavion yllä olevasta ohjelmasta:
Yllä olevassa vuokaaviossa suoritetaan seuraavat vaiheet ohjelman suorittamiseksi:
- Ensinnäkin syöttötiedosto, eli hei C, välitetään esiprosessorille, ja esiprosessori muuntaa lähdekoodin laajennetuksi lähdekoodiksi. Laajennetun lähdekoodin laajennus olisi hei.i.
- Laajennettu lähdekoodi välitetään kääntäjälle, ja kääntäjä muuntaa tämän laajennetun lähdekoodin kokoonpanokoodiksi. Kokoonpanokoodin laajennus olisi hei.s.
- Tämä kokoonpanokoodi lähetetään sitten assemblerille, joka muuntaa kokoonpanokoodin objektikoodiksi.
- Objektikoodin luomisen jälkeen linkittäjä luo suoritettavan tiedoston. Lataaja lataa sitten suoritettavan tiedoston suoritusta varten.