GeeksforGeeks

C program fordítása – A színfalak mögött

A preprocesszor egy rendszerszoftver (olyan számítógépes program, amelyet a számítógép hardverén és az alkalmazási programokon való futtatásra terveztek). A magas szintű nyelv(HLL) előfeldolgozását végzi. Az előfeldolgozás a nyelvfeldolgozó rendszer első lépése. A nyelvfeldolgozó rendszer a magas szintű nyelvet gépi szintű nyelvre vagy abszolút gépi kódra fordítja(azaz a gép által érthető formára).

  • A preprocesszor nem ismeri a C nyelv hatókörszabályait. Az olyan preprocesszor direktívák, mint a #define, a megjelenésükkor azonnal életbe lépnek, és az őket tartalmazó fájl végéig hatályban maradnak; a program blokkszerkezete irreleváns.
  • A preprocesszor elsősorban három feladatot lát el a HLL kódon :

  1. A megjegyzések eltávolítása : Eltávolítja az összes megjegyzést. A megjegyzést csak azért írják, hogy az emberek megértsék a kódot. Így nyilvánvaló, hogy a gép számára nem hasznosak. Tehát a preprocesszor eltávolítja az összeset, mivel nincs rájuk szükség a végrehajtásban, és nem is fognak végrehajtódni.

    Így láthatunk egy fájlt eltávolított megjegyzésekkel linuxban) :
    Írjunk egy C kódot (legyen a fájl neve prog.c). Előfeldolgozzuk a gcc -E prog.c


    A kimeneten a megjegyzések nélküli kódot fogjuk látni.

    Ezt a fájlt ‘.i’ kiterjesztéssel mentjük el (prog.i), ami a fordítóprogramnak lesz a bemenete.

  2. Fájlok felvétele : Beleértve az összes olyan fájlt a könyvtárból, amelyre a programunknak szüksége van. A HLL-ben #include-ot írunk, ami egy direktíva a preprocesszor számára, amely megmondja neki, hogy vegye be a megadott könyvtári fájl tartalmát. Például a #include azt mondja a preprocesszornak, hogy vegye fel a könyvtár stdio.h fájljának összes tartalmát.
    Azt is írhatjuk idézőjelek használatával – #include “stdio.h”
    Megjegyzés: Ha a fájlnevet szögletes zárójelek közé zárjuk, akkor a fájlt a fordító standard include elérési útvonalakban keresi meg. Ha a fájlnév kettős idézőjelek közé van zárva, akkor a keresési útvonal kibővül az aktuális forráskönyvtárral.
  3. Makrók bővítése : A makrók kis függvényekként hívhatók meg, amelyek feldolgozása nem jelent akkora többletköltséget. Ha olyan (kis definícióval rendelkező) függvényt kell írnunk, amelyet rekurzívan (újra és újra) meg kell hívni, akkor a makrót kell előnyben részesítenünk a függvényekkel szemben.
    A makrók definiálása tehát a preprocesszorral történik.
    #define SI 1000

    Ez egy egyszerű példa egy makróra.

    • A makróknak két típusa van:
      // object-like macro#define // function-like macro #define () 
    • A makródefiníciót a #undef segítségével törölhetjük:
      // delete the macro# undef 
    • Többsoros makrót is írhatunk ugyanúgy, mint a függvényt, de minden egyes utasítás “\”-vel végződik.

      #include <stdio.h>
      #define MACRO(num, str) {\
      printf("%d", num);\
      printf(" is");\
      printf(" %s number", str);\
      printf("\n");\
      }

      
      

      
      

Ez a cikk a Diksha hozzájárulásával készült. Ha tetszik a GeeksforGeeks és szeretnél hozzájárulni, írhatsz cikket a contribute.geeksforgeeks.org címen, vagy elküldheted a cikkedet a [email protected] címre. Láthatod, hogy a cikked megjelenik a GeeksforGeeks főoldalán, és segíthetsz más geekeknek.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.