Š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.
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
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:
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.