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