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

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

.

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

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