logo

Proces kompilacije u c

Što je kompilacija?

Kompilacija je proces pretvaranja izvornog koda u objektni kod. To se radi uz pomoć kompajlera. Prevodilac provjerava sintaktičke ili strukturne pogreške u izvornom kodu i ako je u izvornom kodu bez grešaka, generira objektni kod.

Proces kompilacije u c

C proces kompilacije pretvara izvorni kod uzet kao ulaz u objektni kod ili strojni kod. Proces kompilacije može se podijeliti u četiri koraka, tj. pretprocesiranje, kompajliranje, asembliranje i povezivanje.

Predprocesor uzima izvorni kod kao ulaz i uklanja sve komentare iz izvornog koda. Predprocesor preuzima direktivu pretprocesora i tumači je. Na primjer, ako , direktiva je dostupna u programu, tada predprocesor tumači direktivu i zamjenjuje ovu direktivu sadržajem 'stdio.h' datoteka.

baza podataka svojstava kiselina

Sljedeće su faze kroz koje naš program prolazi prije nego što se transformira u izvršni oblik:

    Pretprocesor Sastavljač Asembler Povezivač
Proces kompilacije u c

Pretprocesor

Izvorni kod je kod koji je napisan u uređivaču teksta, a datoteka izvornog koda ima ekstenziju '.c'. Ovaj izvorni kod prvo se prosljeđuje pretprocesoru, a zatim pretprocesor proširuje ovaj kod. Nakon proširenja koda, prošireni kod se prosljeđuje prevoditelju.

Sastavljač

Kod koji je proširen pretprocesorom prosljeđuje se kompajleru. Kompajler pretvara ovaj kod u asemblerski kod. Ili možemo reći da C prevodilac pretvara prethodno obrađen kod u asemblerski kod.

Asembler

Asemblerski kod se pretvara u objektni kod pomoću asemblera. Ime objektne datoteke koju generira asembler isto je kao i izvorna datoteka. Ekstenzija objektne datoteke u DOS-u je '.obj', au UNIX-u je ekstenzija 'o'. Ako je naziv izvorne datoteke 'zdravo.c', tada bi ime objektne datoteke bilo 'hello.obj'.

Povezivač

Uglavnom, svi programi napisani u C-u koriste funkcije knjižnice. Ove funkcije biblioteke su unaprijed kompajlirane, a objektni kod ovih datoteka biblioteke pohranjen je s ekstenzijom '.lib' (ili '.a'). Glavni rad povezivača je kombiniranje objektnog koda datoteka knjižnice s objektnim kodom našeg programa. Ponekad se dogodi situacija kada se naš program poziva na funkcije definirane u drugim datotekama; onda linker igra vrlo važnu ulogu u tome. Povezuje objektni kod ovih datoteka s našim programom. Stoga zaključujemo da je posao povezivača povezati objektni kod našeg programa s objektnim kodom datoteka knjižnice i drugih datoteka. Izlaz povezivača je izvršna datoteka. Naziv izvršne datoteke isti je kao izvorna datoteka, ali se razlikuje samo u ekstenzijama. U DOS-u, ekstenzija izvršne datoteke je '.exe', au UNIX-u se izvršna datoteka može nazvati 'a.out'. Na primjer, ako koristimo funkciju printf() u programu, tada povezivač dodaje svoj pridruženi kod u izlaznu datoteku.

Shvatimo kroz primjer.

zdravo.c

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

Sada ćemo izraditi dijagram toka gornjeg programa:

Proces kompilacije u c

U gornjem dijagramu toka, sljedeći se koraci poduzimaju za izvođenje programa:

  • Prvo, ulazna datoteka, tj. zdravo.c, prosljeđuje se predprocesoru, a pretprocesor pretvara izvorni kod u prošireni izvorni kod. Proširenje proširenog izvornog koda bilo bi zdravo ja.
  • Prošireni izvorni kod prosljeđuje se prevoditelju, a prevoditelj pretvara ovaj prošireni izvorni kod u sklopovni kod. Proširenje montažnog koda bilo bi pozdrav.s.
  • Ovaj asemblerski kod se zatim šalje asembleru, koji pretvara asemblerski kod u objektni kod.
  • Nakon stvaranja objektnog koda, povezivač stvara izvršnu datoteku. Učitavač će tada učitati izvršnu datoteku za izvođenje.