logo

Kompiliavimo procesas c

Kas yra kompiliacija?

Kompiliavimas yra šaltinio kodo konvertavimo į objekto kodą procesas. Tai atliekama kompiliatoriaus pagalba. Kompiliatorius patikrina, ar šaltinio kode nėra sintaksinių ar struktūrinių klaidų, o jei šaltinio kode nėra klaidų, tada sugeneruoja objekto kodą.

Kompiliavimo procesas c

C kompiliavimo procesas konvertuoja šaltinio kodą, kuris buvo įvestas į objekto kodą arba mašinos kodą. Kompiliavimo procesą galima suskirstyti į keturis etapus, ty išankstinį apdorojimą, kompiliavimą, surinkimą ir susiejimą.

Išankstinis procesorius priima šaltinio kodą kaip įvestį ir pašalina visus komentarus iš šaltinio kodo. Pirminis procesorius paima pirminio procesoriaus direktyvą ir ją interpretuoja. Pavyzdžiui, jei , direktyva yra programoje, tada išankstinis procesorius interpretuoja direktyvą ir pakeičia šią direktyvą turiniu „stdio.h“ failą.

Toliau pateikiami etapai, kuriuos mūsų programa praeina prieš paverčiant ją vykdomąja forma:

    Pirminis procesorius Kompiliatorius Surinkėjas Linker
Kompiliavimo procesas c

Pirminis procesorius

Šaltinio kodas yra kodas, parašytas teksto rengyklėje, o šaltinio kodo failui suteikiamas plėtinys „.c“. Šis šaltinio kodas pirmiausia perduodamas pirminiam procesoriui, o tada pirminis procesorius išplečia šį kodą. Išplėtus kodą, išplėstas kodas perduodamas kompiliatoriui.

java int į eilutę

Kompiliatorius

Kodas, kurį išplečia pirminis procesorius, perduodamas kompiliatoriui. Kompiliatorius konvertuoja šį kodą į surinkimo kodą. Arba galime pasakyti, kad C kompiliatorius konvertuoja iš anksto apdorotą kodą į surinkimo kodą.

Surinkėjas

Surinkimo kodas konvertuojamas į objekto kodą naudojant surinkėją. Asemblerio sugeneruoto objekto failo pavadinimas yra toks pat kaip šaltinio failo pavadinimas. Objekto failo plėtinys DOS sistemoje yra „.obj“, o UNIX sistemoje – „o“. Jei šaltinio failo pavadinimas yra „labas.c“, tada objekto failo pavadinimas būtų 'hello.obj'.

Linker

Visų pirma, visos programos, parašytos C, naudoja bibliotekos funkcijas. Šios bibliotekos funkcijos yra iš anksto sukompiliuotos, o šių bibliotekos failų objekto kodas saugomas su plėtiniu „.lib“ (arba „.a“). Pagrindinis linkerio darbas yra sujungti bibliotekos failų objektinį kodą su mūsų programos objekto kodu. Kartais susidaro situacija, kai mūsų programa nurodo funkcijas, apibrėžtas kituose failuose; tada linkeris vaidina labai svarbų vaidmenį. Jis susieja šių failų objekto kodą su mūsų programa. Todėl darome išvadą, kad linkerio užduotis yra susieti mūsų programos objekto kodą su bibliotekos failų ir kitų failų objekto kodu. Linker išvestis yra vykdomasis failas. Vykdomojo failo pavadinimas yra toks pat kaip šaltinio failo pavadinimas, tačiau skiriasi tik plėtiniais. DOS sistemoje vykdomojo failo plėtinys yra „.exe“, o UNIX sistemoje vykdomasis failas gali būti pavadintas „a.out“. Pavyzdžiui, jei programoje naudojame funkciją printf(), tada nuoroda į išvesties failą prideda susijusį kodą.

Supraskime per pavyzdį.

repl java

labas.c

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

Dabar sukursime aukščiau pateiktos programos schemą:

Kompiliavimo procesas c

Aukščiau pateiktoje schemoje programai vykdyti atliekami šie veiksmai:

  • Pirma, įvesties failas, t.y. labas.c, perduodamas pirminiam procesoriui, o pirminis procesorius konvertuoja šaltinio kodą į išplėstinį šaltinio kodą. Išplėsto šaltinio kodo plėtinys būtų Labas as.
  • Išplėstas šaltinio kodas perduodamas kompiliatoriui, o kompiliatorius konvertuoja šį išplėstinį šaltinio kodą į surinkimo kodą. Surinkimo kodo pratęsimas būtų labas.s.
  • Tada šis surinkimo kodas siunčiamas surinkėjui, kuris paverčia surinkimo kodą į objekto kodą.
  • Sukūrus objekto kodą, nuoroda sukuria vykdomąjį failą. Tada įkroviklis įkels vykdomąjį failą vykdymui.