A C preprocesszor egy makróelőfeldolgozó (lehetővé teszi makrók definiálását), amely a program fordítása előtt átalakítja a programot. Ezek az átalakítások lehetnek fejlécfájlok felvétele, makróbővítések stb.
Minden előfeldolgozási utasítás #
szimbólummal kezdődik. Például,
#define PI 3.14
A C előfeldolgozó néhány gyakori felhasználási módja:
- Könyvfejlécfájlok bevonása: #include
- Makrók a #define használatával
- Példa 1: #define preprocessor
- Funkcióhoz hasonló makrók
- 2. példa: A #define preprocessor használata
- Feltételes fordítás
- A feltételes
- Hogyan használjuk a feltételeseket?
- #ifdef direktíva
- #if, #elif és #else direktíva
- #defined
- Előre definiált makrók
- 3. példa: Az aktuális idő lekérdezése a __TIME__
- Javasolt olvasmányok
Könyvfejlécfájlok bevonása: #include
A #include
preprocesszor a fejlécfájlok C programba való bevonására szolgál. Például,
#include <stdio.h>
Itt a stdio.h
egy fejlécfájl. A #include
preprocesszor direktíva a fenti sort a stdio.h
fejlécfájl tartalmával helyettesíti.
Ez az oka annak, hogy a #include <stdio.h>
használata előtt olyan függvényeket kell használnunk, mint a scanf()
és a printf()
.
Elkészíthet saját, függvénydeklarációt tartalmazó fejlécfájlt is, és beépítheti a programjába ezzel a preprocesszor utasítással.
#include "my_header.h"
Látogasson el erre az oldalra, ha többet szeretne megtudni a fejlécfájlok használatáról.
Makrók a #define használatával
A makró egy olyan kódrészlet, amelynek nevet adunk. Makrót a #define
előfeldolgozói utasítással definiálhatunk C-ben.
Itt egy példa.
#define c 299792458 // speed of light
Ha a programunkban c-t használunk, akkor a 299792458
helyébe 299792458
lép.
Példa 1: #define preprocessor
#include <stdio.h>#define PI 3.1415int main(){ float radius, area; printf("Enter the radius: "); scanf("%f", &radius); // Notice, the use of PI area = PI*radius*radius; printf("Area=%.2f",area); return 0;}
Funkcióhoz hasonló makrók
Makrókat is definiálhatunk, amelyek a függvényhíváshoz hasonlóan működnek. Ezt nevezzük függvényszerű makróknak. Például,
#define circleArea(r) (3.1415*(r)*(r))
Minden alkalommal, amikor a program találkozik a circleArea(argument)
-vel, azt a (3.1415*(argument)*(argument))
helyettesíti.
Tegyük fel, hogy 5-t adtunk át argumentumként, akkor az alábbiak szerint fejeződik ki:
circleArea(5) expands to (3.1415*5*5)
2. példa: A #define preprocessor használata
#include <stdio.h>#define PI 3.1415#define circleArea(r) (PI*r*r)int main() { float radius, area; printf("Enter the radius: "); scanf("%f", &radius); area = circleArea(radius); printf("Area = %.2f", area); return 0;}
Látogasson el erre az oldalra, ha többet szeretne megtudni a makrókról és a #define preprocessorról.
Feltételes fordítás
A C programozásban utasíthatja a preprocesszort, hogy egy kódblokkot beépítsen vagy sem. Ehhez feltételes direktívákat használhatunk.
Ez hasonló a if
utasításhoz, egy lényeges különbséggel.
A if
utasítást a végrehajtás során teszteljük, hogy egy kódblokkot végre kell-e hajtani vagy sem, míg a feltételes utasításokat arra használjuk, hogy egy kódblokkot a végrehajtás előtt beépítsünk (vagy kihagyjunk) a programunkba.
A feltételes
- a géptől, operációs rendszertől függően eltérő kódot használunk
- egyazon forrásfájlt két különböző programban fordítjuk
- bizonyos kódot kizárunk a programból, de referenciaként megtartjuk későbbi célokra
Hogyan használjuk a feltételeseket?
A feltételes használatához a #ifdef
, #if
, #defined
, #else
és #elseif
direktívákat használjuk.
#ifdef direktíva
#ifdef MACRO // conditional codes#endif
Itt a feltételes kódok csak akkor kerülnek be a programba, ha MACRO van definiálva.
#if, #elif és #else direktíva
#if expression // conditional codes#endif
>Itt a kifejezés egész típusú kifejezés (lehet egész szám, karakter, aritmetikai kifejezés, makró stb.).
A feltételes kódok csak akkor kerülnek be a programba, ha a kifejezés kiértékelése nem nulla értékre történik.
Az opcionális #else
direktíva a #if
direktívával együtt használható.
#if expression conditional codes if expression is non-zero#else conditional if expression is 0#endif
A #if...#else
-ba a #elif
#if expression // conditional codes if expression is non-zero#elif expression1 // conditional codes if expression is non-zero#elif expression2 // conditional codes if expression is non-zero#else // conditional if all expressions are 0#endif
#defined
A #defined speciális operátorral tesztelhetjük, hogy egy adott makró definiálva van-e vagy sem. Gyakran használják a #if utasítással együtt.
#if defined BUFFER_SIZE && BUFFER_SIZE >= 2048 // codes
Előre definiált makrók
Itt van néhány előre definiált makró a C programozásban.
Makró | érték |
---|---|
__DATE__ |
A string, amely az aktuális dátumot tartalmazza |
__FILE__ |
A. a fájl nevét tartalmazó karakterlánc |
__LINE__ |
Az aktuális sorszámot jelölő egész szám |
__STDC__ |
Ha az ANSI C szabványt követi, akkor az érték egy nem nulla egész szám |
__TIME__ |
Az aktuális dátumot tartalmazó karakterlánc. |
3. példa: Az aktuális idő lekérdezése a __TIME__
A következő program a __TIME__
makró segítségével adja ki az aktuális időt.
#include <stdio.h>int main(){ printf("Current time: %s",__TIME__); }
Kimenet
Current time: 19:54:39
Javasolt olvasmányok
- Sorirányítás
- Pragmák
- Előfeldolgozó kimenet
- Más direktívák
.