Apsveriet šādu kodu:
SĀKTINTEGER n = 5;
PRINT ("n vērtība ir% d", n);
BEIGT
Iepriekš minētais kods nav derīgs C kods.
Bet derīgs ir šāds kods:
// Piemērs1.c#define START int main ()
#define END
#define INTEGER int
#define PRINT (A, B) printf (A, B)
SĀKT
INTEGER n = 5;
PRINT ("n vērtība ir% d", n);
BEIGT
Pirms kompilēšanas makro START, INTEGER, PRINT un END ir aizstāts ar to vērtību, un kods kļūst par derīgu C kodu. Mēs varam pārbaudīt, izmantojot šādu komandu:
gcc -E 1. piemērs.cŠī komanda tiks parādīta pēc visu makro paplašināšanas.
Tagad mēs redzēsim dažāda veida makro:
1. Objektam līdzīgi makro:
Sintakse:
#define macro_name macro_value- Makro vienmēr sākas ar #define
- macro_name ir lietotāja definēts makro nosaukums
- macro_value ir makro vērtība. Tas var būt jebkas, bet viena rindiņa un makro pamatteksts beidzas ar šīs līnijas galiem. Tā beigās nav nepieciešams semikols (;). Tiek apsvērta arī telpa.
Ja makro aizņem vairāk nekā vienu rindiņu, mēs to varam izdarīt šādi:
#define macro_name macro_value1 \macro_value2 \
makro_vērtība3
#define MAX 200
Šis makro izskatās kā datu objekts, tāpēc šāda veida makro tiek saukts par objektam līdzīgu makro.
// Piemērs2.c// # iekļaut
#define MAX 200
int main ()
printf ("MAX vērtība ir:% d", MAX);
atgriešanās 0;
In Exapmle2.c, MAX ir makro. Pēc iznākuma mēs to novērojam MAX tiek aizstāts ar tā vērtību 200.
2. Funkcijām līdzīgi makro:
Sintakse:
#define macro_name () makro_vērtībamakro_nosaukums ir lietotāja definēts makro nosaukums. Pārī iekavas ir jāliek aiz makro_nosaukums. Starp tām nav atļauta atstarpe makro_nosaukums un iekavas. Mēs arī varam nodot argumentus šāda veida makros.
#define add (x, y) x + yŠis makro izskatās kā funkciju izsaukums, tāpēc šāda veida makro sauc par funkcijai līdzīgu makro.
// Piemērs3.c#define add (x, y) x + y
int main ()
int a;
pludiņš b;
a = pievienot (4,5);
b = pievienot (2.5,3.6)
atgriešanās 0;
3. piemērā.c, mēs esam redzējuši, ka atšķirībā no C funkcijas makro aizstāj tikai kodu ar argumentiem, to neaprēķinot. Tātad, mēs varam nodot dažādu datu tipu, izmantojot to pašu makro.
Ja mēs ievietojam atstarpi starp makro nosaukumu un iekavām, tas darbojas tāpat kā objektam līdzīgs makro. Zemāk parādīts C piemērs.
// 4. piemērs.c#define add (x, y) x + y
int main ()
int a;
pludiņš b;
a = pievienot (4,5);
b = pievienot (2.5,3.6)
4. piemērā.c, mēs redzējām, ka makro pievienošana tiek aizstāta ar (x, y) x + y . Tāds pats kā objektam līdzīgs makro.
3. Makro žetonu ielīmēšanai:
C valodā marķiera ielīmēšanai tiek izmantots operators ##. Izmantojot šo operatoru, mēs varam apvienot divus derīgus marķierus vienā derīgā marķierī.
Piemērs:
#define MARGE (x, y) x ## y
int main ()
int num = MARGE (52,34);
atgriešanās 0;
Ja mēģinām ielīmēt marķieri, kas nerada derīgu marķieri, C kompilators sniedz kļūdu vai brīdinājumu.
// Piemērs6.c#define MARGE (x, y) x ## y
int main ()
int num = MARGE (52, +);
atgriešanās 0;
In 6. piemērs.c, mums ir kļūdas ziņojums, jo pēc divu marķieru kombinācijas mēs iegūstam nederīgu marķieri '52 + '.
4. Makro ievilkšanai:
C valodā # operators tiek izmantots, lai pārveidotu makro parametru virknes konstanti. Kad operatora # priekšā ir makro parametrs, parametrs tiek pārveidots par virknes literālu. Stringingu var izmantot objektu un funkciju līdzīgiem makro.
Piemērs:
#define STRINGIZING (x) #x
int main ()
printf (STRINGIZING (Sveika pasaule));
atgriešanās 0;
In 7. piemērs.c izmantojot makro STRINGIZING, esam ieguvuši virkni “Hello World”.
Secinājums:
Šis raksts ir uzzinājis par visiem makro veida veidiem Objektiem līdzīgi makro, Funkcijām līdzīgi makro, Makro žetonu ielīmēšanai, Makro ievilkšanai un makro ievilkšanai C valodā. Tagad mēs bez šaubām varam izmantot makro savā C programmā.