Prevajanje je postopek pretvorbe izvorne kode jezika C v strojno kodo. Ker je C jezik srednje ravni, potrebuje prevajalnik, da ga pretvori v izvedljivo kodo, tako da lahko program izvajamo na našem računalniku.
Program C gre med prevajanjem skozi naslednje faze:

Postopek prevajanja v C
Kako prevedemo in poženemo program C?
Najprej potrebujemo prevajalnik in urejevalnik kode za prevajanje in zagon programa C. Spodnji primer je računalnik Ubuntu s prevajalnikom GCC.
1. korak: Ustvarjanje izvorne datoteke C
Najprej ustvarimo program C z urejevalnikom in shranimo datoteko kot filename.c
char tostring java
$ vi filename.c>
Lahko napišemo preprost program hello world in ga shranimo.
2. korak: Prevajanje s prevajalnikom GCC
Za prevajanje naše izvorne datoteke filename.c uporabljamo naslednji ukaz v terminalu
hashmap v Javi
$ gcc filename.c –o filename>
Prevajalniku GCC lahko posredujemo številna navodila za različne naloge, kot so:
- Možnost -Wall omogoči vsa opozorilna sporočila prevajalnika. Ta možnost je priporočljiva za ustvarjanje boljše kode.
- Možnost -o se uporablja za podajanje imena izhodne datoteke. Če te možnosti ne uporabimo, se ustvari izhodna datoteka z imenom a.out.
Če v našem programu C ni nobenih napak, bo ustvarjena izvršljiva datoteka programa C.
3. korak: Izvajanje programa
Ko je izvedljiva datoteka prevajanja ustvarjena in zaženemo ustvarjeno izvršljivo datoteko s spodnjim ukazom.
$ ./filename>
Program se bo izvedel in izhod bo prikazan v terminalu.
Kaj je v procesu kompilacije?
Prevajalnik pretvori program C v izvršljivo datoteko. Obstajajo štiri faze, da program C postane izvršljiv:
- Predobdelava kompilacijskega sklopa Povezovanje
Z izvedbo spodnjega ukaza dobimo vse vmesne datoteke v trenutnem imeniku skupaj z izvršljivo datoteko.
$gcc -Wall -save-temps filename.c –o filename>
Naslednji posnetek zaslona prikazuje vse ustvarjene vmesne datoteke.
preverjanje java je ničelno
Vmesne datoteke
Poglejmo eno za drugo, kaj vsebujejo te vmesne datoteke.
kako preveriti velikost zaslona monitorja
1. Predobdelava
To je prva faza, skozi katero poteka izvorna koda. Ta faza vključuje:
- Odstranitev komentarjev
- Razširitev makrov
- Razširitev vključenih datotek.
- Pogojna kompilacija
Predobdelani izhod je shranjen v ime datoteke.i . Poglejmo, kaj je znotraj filename.i: using $vi ime datoteke.i
V zgornjem izhodu je izvorna datoteka napolnjena z veliko in veliko informacijami, vendar je na koncu naša koda ohranjena.
- printf zdaj vsebuje a + b namesto add(a, b), ker so se makri razširili.
- Komentarji so odstranjeni. #include manjka, namesto tega vidimo veliko kode. Tako so bile datoteke glave razširjene in vključene v našo izvorno datoteko.
2. Sestavljanje
Naslednji korak je prevajanje filename.i in izdelava; vmesna prevedena izhodna datoteka ime datoteke.s . Ta datoteka je v navodilih na ravni sestavljanja. Oglejmo si to datoteko z uporabo $nano ime datoteke.s terminalski ukaz.
Datoteka s sestavno kodo
Posnetek kaže, da je v zbirnem jeziku, ki ga zbirnik razume.
3. Sestavljanje
V tej fazi se ime datoteke.s vzame kot vhod in spremeni v ime datoteke.o s strani sestavljalca. Ta datoteka vsebuje navodila na ravni stroja. V tej fazi se samo obstoječa koda pretvori v strojni jezik in klici funkcij, kot je printf(), niso razrešeni. Oglejmo si to datoteko z uporabo $vi ime datoteke.o
v redu
Binarna koda
4. Povezovanje
To je zadnja faza, v kateri se izvede vsa povezava funkcijskih klicev z njihovimi definicijami. Linker ve, kje so implementirane vse te funkcije. Linker opravi tudi nekaj dodatnega dela, našemu programu doda nekaj dodatne kode, ki je potrebna, ko se program zažene in konča. Na primer, obstaja koda, ki je potrebna za nastavitev okolja, kot je posredovanje argumentov ukazne vrstice. To nalogo lahko enostavno preverite z uporabo $size ime datoteke.o in $size ime datoteke . S temi ukazi vemo, kako se izhodna datoteka poveča iz objektne datoteke v izvršljivo datoteko. To je zaradi dodatne kode, ki jo Linker doda našemu programu.
Opomba: GCC privzeto izvaja dinamično povezovanje, zato je printf() dinamično povezan v zgornjem programu. Glejte to , to in to za več podrobnosti o statičnem in dinamičnem povezovanju.