logo

Összeállítási folyamat a c

Mi az az összeállítás?

A fordítás a forráskód objektumkóddá alakításának folyamata. Ez a fordító segítségével történik. A fordító ellenőrzi a forráskódban a szintaktikai vagy szerkezeti hibákat, és ha a forráskód hibamentes, akkor létrehozza az objektumkódot.

Összeállítási folyamat a c

A c fordítási folyamat a bemeneti forráskódot objektumkódmá vagy gépi kóddá alakítja. A fordítási folyamat négy lépésre osztható, azaz előfeldolgozásra, fordításra, összeállításra és linkelésre.

Az előfeldolgozó a forráskódot veszi bemenetként, és eltávolítja az összes megjegyzést a forráskódból. Az előfeldolgozó veszi az előfeldolgozó direktívát és értelmezi azt. Például ha , a direktíva elérhető a programban, akkor az előfeldolgozó értelmezi a direktívát, és ezt a direktívát a tartalmával helyettesíti 'stdio.h' fájlt.

React js oktatóanyag

Az alábbiakban felsoroljuk azokat a fázisokat, amelyeken programunk áthalad, mielőtt végrehajtható formává alakulna:

    Előfeldolgozó Fordítóprogram Szerelő Linker
Összeállítási folyamat a c

Előfeldolgozó

A forráskód egy szövegszerkesztőben írt kód, és a forráskódfájl kiterjesztése „.c”. Ezt a forráskódot először átadják az előfeldolgozónak, majd az előfeldolgozó kibontja ezt a kódot. A kód kibontása után a kibővített kód átadásra kerül a fordítónak.

Fordítóprogram

Az előfeldolgozó által kibővített kód átadásra kerül a fordítónak. A fordító ezt a kódot összeállítás kódjává alakítja. Vagy azt is mondhatjuk, hogy a C fordító az előre feldolgozott kódot összeállítási kóddá alakítja.

Szerelő

Az assembler kódot objektumkóddá alakítja egy assembler segítségével. Az assembler által generált objektumfájl neve megegyezik a forrásfájléval. Az objektumfájl kiterjesztése DOS-ban '.obj', UNIX-ban pedig 'o'. Ha a forrásfájl neve 'hello.c', akkor az objektumfájl neve 'hello.obj' lenne.

Linker

Főleg minden C nyelven írt program könyvtári függvényeket használ. Ezek a könyvtári függvények előre le vannak fordítva, és ezeknek a könyvtárfájloknak az objektumkódja '.lib' (vagy '.a') kiterjesztéssel kerül tárolásra. A linker fő feladata, hogy a könyvtári fájlok objektumkódját kombinálja programunk objektumkódjával. Néha előfordul, hogy a programunk más fájlokban definiált függvényekre hivatkozik; akkor ebben nagyon fontos szerepe van a linkernek. Ezeknek a fájloknak az objektumkódját a programunkhoz kapcsolja. Ezért arra a következtetésre jutunk, hogy a linker feladata az, hogy programunk objektumkódját összekapcsolja a könyvtári fájlok és más fájlok objektumkódjával. A linker kimenete a végrehajtható fájl. A végrehajtható fájl neve megegyezik a forrásfájléval, de csak a kiterjesztésében tér el. DOS-ban a végrehajtható fájl kiterjesztése „.exe”, UNIX-ban pedig „a.out” néven lehet végrehajtani. Például, ha egy programban a printf() függvényt használjuk, akkor a linker hozzáadja a hozzá tartozó kódot egy kimeneti fájlba.

Értsük meg egy példán keresztül.

hello.c

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

Most elkészítjük a fenti program folyamatábráját:

Összeállítási folyamat a c

A fenti folyamatábrán a következő lépéseket kell végrehajtani egy program végrehajtásához:

  • Először is a bemeneti fájl, azaz hello.c, átadásra kerül az előfeldolgozónak, és az előfeldolgozó a forráskódot kiterjesztett forráskóddá alakítja. A kibővített forráskód kiterjesztése az lenne helló.i.
  • A kibővített forráskódot átadja a fordítónak, és a fordító ezt a kibővített forráskódot összeállítási kóddá alakítja. Az összeállítási kód kiterjesztése az lenne helló.s.
  • Ezt az összeállítási kódot ezután elküldik az assemblernek, amely az összeállítási kódot objektumkóddá alakítja.
  • Az objektumkód létrehozása után a linker létrehozza a végrehajtható fájlt. A betöltő ezután betölti a végrehajtható fájlt a végrehajtáshoz.