Adjuk, programozás C és C

#define direktíva meghatározza a személyazonosságát és karaktersor, ami lesz-wimps ezt az azonosítót, ha érzékeli a programban. Azonosító úgynevezett a makró nevét, és a csere folyamat az úgynevezett makro-cserét. Standare-kellemes kilátás nyílik az irányelv az alábbiak szerint:

#define makro-name posledovatelnost_simvolov

Vegyük észre, hogy ez az állítás nincs pontosvessző. Két identifikato-set és egy karaktersorozat lehet bármilyen rések számát. Macro éppen befejezte az átmenetet egy új sort.

Például, ha az szükséges, hogy egy 1-es értéket TRUE, FALSE 0 lehetséges, hogy állapítsa meg a következő két makrók:

#define TRUE 1
#define FALSE 0

Ennek eredményeképpen, ha a fordító találja a szövegben IGAZ vagy HAMIS programot, akkor cserélje ki a 1 és 0, ill. Például, a következő sorban „0 1 2”:

printf (, HAMIS, IGAZ, IGAZ + 1 "...");

Ha a makró van megadva, akkor lehet használni úgy, hogy más makrók. Például az alábbi kódot rendel nevek EGY, a két és három számszerű értékek:

#define ONE 1
#define két egy + ONE
#def dielou három, egy + KÉT

Ennek eredményeként a makró azonosítók helyett a megadott karakterláncot. Ha a nem szükségszerűség, hogy meghatározza a standard hiba üzenet, akkor írj valami hasonló nyomvonal-guide:

#define E_MS "Standart hiba bemenet. \ n"
/ *. * /
printf (E_MS);

Ha a fordító érzékeli E_MS azonosítója, akkor lecseréli a vonal «Standart hiba bemenet.» Sőt, a fordító látja a nyilatkozatot

printf ( "Standart hiba bemeneti \ n.");

Ha az azonosító a sorban, a helyettesítés fordul elő. Például:

#define XYZ ez egy teszt
/ *. * /
printf ( "XYZ");

gyarapítják nem «ez egy teszt», a «XYZ».

Ha a szöveg nem fér ki egy sorba, akkor továbbra is a következő sorban, forgalomba a sor végére backslash, mint azt az alábbi példa:

#define LONG_STRING „Ez egy nagyon hosszú” \
karakterlánc, amellyel példaként. "

A programozók írásban C gyakran használják, hogy meghatározzák a sapkák Azonosító tori. Ez a megállapodás segít senkinek olvasó program, így ez egy pillanat alatt, hogy mit kell foglalkozni egy makró. Szintén VCE #define jobb helyzetben elején a fájlt, vagy akár egy külön header fájlt.

Nagyon gyakran a makrók meghatározásához használt „mágikus számok” kifejezés a pro-gram. Például, a program meg tudja határozni a tömegét, és van néhány eljárásokat dolgoznak velük. Ahelyett, hogy a kódban az a tömb méretét, hogy pontosabban határozzák meg a makró, illetve megfelelő-a tömb méretét, és használja a helyeken, ahol ez szükséges használni időt intézkedést. Így, ha meg akarja változtatni a méret a tömb, az egyetlen dolog, amit tennie kell -, hogy változtassa meg a #define nyilatkozatot, és újrafordítani a programot. Ahol valsya felhasználású ezt a makrót, nem lesz automatikusan változik. Vegyük ezt a példát:

#define MAX_SIZE 100
/ *. * /
float egyenleg [MAX_SIZE];
/ *. * /
float temp [MAX_SIZE];

Méretének megváltoztatásához mindkét tömbök csak megváltoztatni a meghatározás MAX_SIZE.

#define direktíva van egy másik lehetőség: a makró lehet érveket. Minden alkalommal, amikor egy találkozó a makrót macro érvek fogják felváltani igazi érv pro-gramm. Ez a fajta makró hívásakor makro-típusú funkció. Például:

#include
#define MIN (a, b) ((a)<(b)). (a). (b)
int main (void)
int x, y;
x = 10; Y = 20;
printf ( "A minimum :.", MIN (x, y));
vissza 0;
>

A programot összeállítása helyett MIN (a, b) a fenti kifejezés szubsztituált, ahol ahelyett, hogy dummy paraméterek a és b jelentése szubsztituált valós x és y. Így, helyettesítve a függvény printf () a következő alakú:

printf ( "A minimum :.", ((x) <(y) ). (x). (y) );

Meg kell legyen óvatos, amikor meghatározzák a makrók részesülő érveket, vagy lehet félig chit néhány váratlan eredmény. Vegyük például az alábbi rövid mu programok felhasználásával makró meghatározására paritás értékek:

/ * A program termel a rossz eredmény * /
#include
#define páros (a)% 2 == 0. 1. 0
int main (void)
ha (még (9 + 1)) printf ( "még");
mást printf ( "páratlan");
vissza 0;
>

Mivel az út a helyettesítés, a program nem működik megfelelően. Ennek eredményeként, a program összeállítása EVEN (9 + 1) bővíteni

Mint ismeretes, a modulo szereplők magasabb elsőbbséget, mint üzemeltető rétegű zheniya. Ez azt jelenti, hogy az első modul végre azáltal, hogy a 1-es szám, és akkor az eredmény bekerül 9, ami természetesen nem lehet 0. A probléma megoldásához a következőképpen megkötésére habosító-páros és makro zárójelben, amint az a következő a jobb hit ezek a programok:

#include
#define páros (a) (a)% 2 == 0. 1. 0
int main (void)
ha (még (9 + 1)) printf ( "még");
mást printf ( "páratlan");
vissza 0;
>

Vegye figyelembe, hogy 9 + 1 kiszámítása meghozatala előtt a modulon. Általában a következtetést a makro paraméterek zárójelben - ez egy jó ötlet, és ez lehetővé teszi, hogy elkerüljék a sok probléma.
A makró helyettesítés helyett az igazi funkcióját egyetlen nagy-CIÓ előnye - jelentősen növeli a sebességet a program, mivel nincs szükség a hulladék időt egy függvény hívás befejezése és visszatérés belőle. Azonban ez a sebesség növelése kell fizetnie méretének növekedése a futtatható kódot a program, mivel a programok MA kénytelen megismételni a makró kódot.

Kapcsolódó cikkek