Apsvarstykite šį kodą:
PRADĖTIINTEGRAS n = 5;
PRINT ("n reikšmė yra% d", n);
GALAS
Anksčiau pateiktas kodas nėra galiojantis C kodas.
Bet galioja šis kodas:
// 1 pavyzdys.c#define START int main ()
#define END
#define INTEGER int
#define PRINT (A, B) printf (A, B)
PRADĖTI
INTEGRAS n = 5;
PRINT ("n reikšmė yra% d", n);
GALAS
Prieš sudarant makrokomandas START, INTEGER, PRINT ir END buvo pakeista jų verte, o kodas tampa galiojančiu C kodu. Mes galime patikrinti naudodami šią komandą:
gcc -E1 pavyzdys.cŠi komanda bus rodoma išplėtus visas makrokomandas.
Dabar pamatysime įvairių tipų makrokomandas:
1. Į objektą panašios makrokomandos:
Sintaksė:
#define macro_name macro_value- Makrokomanda visada pradedama nuo # apibrėžti
- „macro_name“ yra vartotojo nustatytas makrokomandos pavadinimas
- macro_value yra makrokomandos vertė. Tai gali būti bet kas, bet viena eilutė ir makrokomandas baigiasi tos eilutės galais. Tam nereikia kabliataškio (;). Taip pat atsižvelgiama į kosmosą.
Jei makrokomanda užima daugiau nei vieną eilutę, galime tai padaryti taip:
#define macro_name macro_value1 \macro_value2 \
macro_value3
#define MAX 200
Ši makrokomanda atrodo kaip duomenų objektas, todėl šio tipo makrokomandos vadinamos kaip į objektą panašios makrokomandos.
// 2 pavyzdys.c// # įtraukti
#define MAX 200
int main ()
printf ("MAX reikšmė yra:% d", MAX);
grąžinti 0;
Į Exapmle2.c, MAX yra makrokomanda. Iš išvesties mes tai stebime MAKS pakeičiama jo verte 200.
2. Į funkcijas panašios makrokomandos:
Sintaksė:
#define macro_name () makro_valuemakro_pavadinimas yra vartotojo nustatytas makrokomandos pavadinimas. Pora skliaustų turi būti dedama po makro_pavadinimas. Tarpų tarpas nėra leidžiamas makro_pavadinimas ir skliausteliuose. Taip pat galime perduoti argumentus šio tipo makrokomandose.
#define add (x, y) x + yŠi makrokomanda atrodo kaip funkcijos iškvietimas, todėl šio tipo makrokomandos vadinamos panašia į funkciją makrokomanda.
// 3 pavyzdys.c#define add (x, y) x + y
int main ()
int a;
plūdė b;
a = pridėti (4,5);
b = pridėti (2.5,3.6)
grąžinti 0;
3 pavyzdyje.c, matėme, kad skirtingai nei C funkcija, makrokomanda tik kodą pakeičia argumentais, jo neapskaičiuodama. Taigi, mes galime perduoti skirtingus duomenų tipus naudodami tą pačią makrokomandą.
Jei tarp makrokomandos pavadinimo ir skliaustų dedame tarpą, tai veikia kaip makrokomanda, panaši į objektą. Žemiau C pavyzdys tai iliustruoja.
// 4 pavyzdys.c#define add (x, y) x + y
int main ()
int a;
plūdė b;
a = pridėti (4,5);
b = pridėti (2.5,3.6)
4 pavyzdyje.c, matėme, kad makrokomandos pridėjimas pakeičiamas (x, y) x + y . Tas pats kaip makrokomanda, panaši į objektą.
3. Žetonų įklijavimo makrokomanda:
C kalba žetonų įklijavimui naudojamas operatorius ##. Naudodami šį operatorių, du galiojančius prieigos raktus galime sujungti į vieną galiojantį prieigos raktą.
Pavyzdys:
#define MARGE (x, y) x ## y
int main ()
int skaičius = MARGE (52,34);
grąžinti 0;
Jei bandome įklijuoti prieigos raktą, kuris nesukuria galiojančio prieigos rakto, C kompiliatorius pateikia klaidą arba įspėjimą.
// 6 pavyzdys.c#define MARGE (x, y) x ## y
int main ()
int skaičius = MARGE (52, +);
grąžinti 0;
Į 6 pavyzdys.c, turime klaidos pranešimą, nes, sujungus du žetonus, gauname neteisingą prieigos raktą „52 +“.
4. Struktūravimo makrokomanda:
C kalba # operatorius naudojamas makrokomandos parametrą paversti eilutės konstanta. Kai prieš # operatorių yra makrokomandos parametras, parametras konvertuojamas į eilutės literalį. Stringavimas gali būti naudojamas objektų ir funkcijų tipo makrokomandoms.
Pavyzdys:
#define STRINGIZING (x) #x
int main ()
printf (STRINGIZING (Hello World));
grąžinti 0;
Į 7 pavyzdys.c gavome eilutę „Sveikas pasaulis“, naudojant makrokomandą STRINGIZING.
Išvada:
Šis straipsnis sužinojo apie visų tipų makrokomandas Į objektą panašios makrokomandos, Į funkcijas panašios makrokomandos, Žetonų įklijavimo makrokomanda, Makrokomanda, skirta gryninti, ir makrokomanda, skirta gryninti C kalba. Dabar be jokios abejonės galime naudoti makrokomandą savo C programoje.