Makro funkcijos C++

Makro Funkcijos C



Programuojant C++, makrofunkcijos yra galingas įrankis, padidinantis kodo lankstumą ir efektyvumą. Makrokomandas naudojamas kaip rezervuota vieta šaltinio kode, pakeičiant ją atitinkama reikšme išankstiniu procesoriumi prieš faktinį kompiliavimo procesą. Makrokomandos inicijuojamos naudojant #define komandą, o jas galima pašalinti naudojant #undef komandą. Šios makrokomandos suteikia kūrėjams galimybę apibrėžti daugkartinio naudojimo kodo fragmentus, taip lengvai supaprastinant pasikartojančias užduotis. Šiame straipsnyje išsamiai aprašomos makrokomandos funkcijos, paaiškinamos jų savybės, naudojimo atvejai ir galimi pranašumai.

Kas yra makrofunkcija?

Makrokomandos funkcija yra mažas, pakartotinai naudojamas C++ kodo komponentas, parašytas naudojant #define direktyvą. Makrokomandas veikia kaip teksto pakeitimo mechanizmas, kai bet koks jos pavadinimo įvykis kode pakeičiamas apibrėžtu kodo bloku pirminio procesoriaus fazės metu. Makrokomandos yra ypač naudingos atliekant pasikartojančias užduotis, parametrizuotas operacijas ir kodą, kurį reikia pritaikyti prie skirtingų scenarijų.







Makrofunkcijos sintaksė:

Sintaksė makrokomandos funkcijai apibrėžti apima #define direktyvą, po kurios nurodomas makrokomandos pavadinimas, parametrų sąrašas (jei yra) ir kodo blokas. Štai pagrindinis pavyzdys:



# apibrėžti Squre ( kv ) ( ( kv ) * ( kv ) )



Šiame pavyzdyje „Squre“ yra makrokomandos funkcija, kuri paima vieną parametrą „sq“ ir apskaičiuoja jo kvadratą. Dvigubi skliaustai užtikrina teisingą įvertinimą, ypač kai parametras apima išraiškas.





Dabar pereikime prie pavyzdžių skyriaus, kad sužinotume, kada naudoti makrokomandos funkciją C++ programoje.

C++ makrofunkcijų taikymas

Makrokomandos yra svarbios įvairiuose programavimo scenarijuose, suteikdamos kūrėjams universalų kodo optimizavimo ir supaprastinimo įrankį. Išnagrinėkime keletą įtikinamų naudojimo atvejų, kurie pabrėžia C++ makrofunkcijų efektyvumą.



1 scenarijus: kodo pakartotinis naudojimas

Makrokomandos puikiai tinka scenarijuose, kai tam tikras kodo šablonas kartojasi visoje programoje. Įtraukdami kodą į makrokomandą, kūrėjai gali be vargo jį pakartotinai panaudoti, skatindami švaresnį ir labiau prižiūrimą kodą. Toliau pateiktoje programoje naudosime makrokomandą, norėdami apskaičiuoti kelias nurodytų skaičių sumas. Pirmiausia pažiūrėkime kodą, o tada paaiškinkime jį išsamiai:

#include

naudojant vardų erdvę std;



#define ADD(ab, yz) ((ab) + (yz))



tarp pagrindinis ( ) {



int suma1 PRIDĖTI ( 9 , 3 ) ;

cout << '9 ir 3 suma yra =' << suma1 << endl;



int suma2 PRIDĖTI ( vienuolika , 7 ) ;

cout << '11 ir 7 suma yra =' << suma2 << endl;



tarpt cd = 8 , wx = 4 ;



int suma3 = PRIDĖTI ( cd , wx ) ;

cout << '8 ir 4 suma yra =' << suma3 << endl;



grąžinti 0 ;

}

Antraštės faile „#include “ pateikiamos įvesties ir išvesties operacijų, tokių kaip cout ir cin, funkcijos. „#define ADD(ab, yz) ((ab) + (yz))“ apibrėžia makrokomandos funkciją ADD, kuri turi du argumentus: „ab“ ir „yz“. Makrokomandoje naudojama išankstinio procesoriaus direktyva, kuri yra #define, kad kompiliavimo metu bet koks ADD(ab, yz) įvykis būtų pakeistas faktine išraiška (ab) + (yz). Programos įvesties taškas, kuriame prasideda kodo vykdymas, yra „int main()“.

Naudodami ADD makrokomandą apskaičiuojame dvi sumas: viena yra 9 ir 3, o kita - 11 ir 7. Šių dviejų sumų skaičius tiesiogiai perduodame ADD makrokomandai. Tačiau trečiajai sumai skaičių perduodame naudodami kintamuosius. Skaičiai 8 ir 4 yra saugomi atitinkamai „cd“ ir „wx“ kintamuosiuose, kurie vėliau perduodami ADD makrokomandai.

„Int sum1 = ADD(9, 3);“ eilutė priskiria 9 ir 3 sumą kintamajam „sum1“. Kompiliavimo metu makrokomandos ADD(9, 3) pakeičiamos 9 + 3, todėl gaunama 8 vertė, kuri saugoma „sum1“. „Int sum2 = ADD(11, 7);“ eilutė rodo pakartotinį makrokomandos naudojimą su skirtingais argumentais. „Sum2“ išlaikoma suma 11 ir 7.

Galiausiai „int cd = 8, wx = 4; int suma3 = ADD(cd, wx);” Pavyzdys rodomas naudojant makrokomandą su kintamaisiais. Vertės „cd“ ir „wx“ naudojamos kaip ADD argumentai, todėl suma priskiriama „sum3“. Štai išvestis:

Kaip matote šiame pavyzdyje, makrokomandos ADD funkcijai reikia dviejų parametrų. Jis atlieka pridėjimo operaciją, demonstruoja jos naudojimą su skirtingomis reikšmėmis ir kintamaisiais ir atspausdina rezultatus į konsolę. Naudodami šią makrokomandos funkciją galime lengvai pakartotinai panaudoti papildymo logiką visoje programoje. Tai skatina švaresnį ir lengviau prižiūrimą kodą, ypač kai tos pačios pridėjimo operacijos reikia keliose vietose.

2 scenarijus: Parametrizuotos operacijos

Makrokomandos pateikiamos su parametrais, kurie leidžia kūrėjams sukurti bendrą kodą, kuris gali prisitaikyti prie skirtingų įvesties verčių. Tai ypač naudinga atliekant operacijas, kurios turi būti atliekamos naudojant kintamus parametrus. Pažiūrėkime šį pavyzdį:

#include

naudojant vardų erdvę std;



#define MAXI(ab, yz) ((ab) > (yz) ? (ab) : (yz))



tarp pagrindinis ( ) {



int max1 = MAXI ( 9 , 3 ) ;

cout << maks.1 << ' yra didžiausias nuo 9 iki 3' << endl << endl;



int kl = 12 , Šv = 9 ;

int max2 = MAXI ( kl, šv ) ;

cout << maks.2 << 'yra maksimalus tarp' << adresu << 'ir' << Šv << endl << endl;



int max3 = MAXI ( 3 * kl, trečiadienis + 5 ) ;

cout << maks.3 << 'yra maksimalus skaičius tarp 3 *' << adresu << 'ir' << Šv << '+5' << endl;



grąžinti 0 ;

}



Makro apibrėžimas: #define MAXI(ab, yz) ((ab) > (yz) ? (ab) : (yz))

Ši eilutė apibrėžia makrokomandą, pavadintą MAXI, kuri paima du parametrus „ab“ ir „yz“ ir grąžina didžiausią iš dviejų reikšmių, naudodama trijų dalių operatorių.

Naudodami makrokomandą su konstantomis, int max1 = MAXI(9, 3), apskaičiuojame maksimalų skaičių nuo 9 iki 3, o rezultatas išsaugomas „max1“. Tada rezultatas rodomas konsolėje.

Naudojant makrokomandos funkciją su kintamaisiais „kl“ ir „st“, šiuose kintamuosiuose saugomi du skaičiai, kurie vėliau perduodami MAXI makrokomandos funkcijai, kad būtų galima rasti didžiausią skaičių tarp jų. Makrokomandos funkcija pakartotinai naudojama su „kl“ ir „st“ kintamaisiais, o tai rodo, kad ji veikia ir su konstantomis, ir su kintamaisiais. Makrokomandos funkcija taikoma (3 * kl ir st + 5) išraiškai, parodanti jos pritaikymą skirtingiems įvesties tipams. Kai paleisite šį kodą, turėtumėte matyti tokią išvestį:

Pateiktame pavyzdyje MAXI makrokomandos funkcija nustato didžiausią reikšmę tarp dviejų skaičių. Pagrindinė funkcija parodo šios makrokomandos naudojimą su pastoviomis reikšmėmis, kintamaisiais ir net išraiškomis. Tada rezultatas rodomas konsolėje. Tai parodo, kaip MAXI makrokomandos funkcija prisitaiko prie skirtingų įvesties reikšmių ir išraiškų, suteikdama bendrą mechanizmą maksimaliai vertei rasti.

3 scenarijus: sąlyginis kompiliavimas

Makrokomandos padeda įjungti arba išjungti tam tikras kodo dalis kompiliavimo metu. Tai naudinga įtraukiant konkrečios platformos kodą arba valdant funkcijų perjungimus.

#include

#define DEBUG_MODE

tarp pagrindinis ( ) {
#ifdef DEBUG_MODE
std::cout << 'Ei, Kalsoom! Derinimo režimas įjungtas.' << std::endl;
#endif

grąžinti 0 ;
}

Šiame pavyzdyje eilutė „#define DEBUG_MODE“ apibrėžia makrokomandą, pavadintą DEBUG_MODE. Jei ši eilutė nekomentuojama, tai reiškia, kad įjungtas derinimo režimas. Jei jis komentuojamas, derinimo režimas išjungtas. „#ifdef DEBUG_MODE“ direktyva patikrina, ar DEBUG_MODE makrokomanda yra apibrėžta. Jei jis yra apibrėžtas (nekomentuojamas), kodai, esantys #ifdef ir #endif, bus įtraukiami kompiliavimo metu. Jei ji neapibrėžta (komentuojama), ta kodo dalis bus neįtraukta.

Ši sąlyginio kompiliavimo technika yra galinga norint valdyti kodo variantus, pagrįstus skirtingais kompiliavimo parametrais. Jis dažniausiai naudojamas derinant, kai konkretus derinimo kodas įtraukiamas tik tada, kai reikia, ir jį galima lengvai įjungti arba išjungti apibrėžiant arba komentuojant atitinkamą makrokomandą. Žiūrėkite šią išvestį:

Kaip matote, kodas tarp #ifdef ir #endif buvo įvykdytas ir atspausdintas konsolėje, rodomas pranešimas „Ei, Kalsoom! Derinimo režimas įjungtas“ pranešimas. Makrokomandos supaprastina nuoseklių pakeitimų kodų bazėje procesą. Jei reikia atlikti pakeitimą, pakeitus makrokomandos apibrėžimą, pakeitimas bus taikomas vienodai visur, kur naudojama makrokomanda.

Išvada

Apibendrinant galima pasakyti, kad C++ makrofunkcijos yra galingas mechanizmas, padidinantis kodo lankstumą ir efektyvumą. Kūrėjai gali panaudoti #define direktyvą, kad aptrauktų kodo blokus, skatintų pakartotinį naudojimą ir supaprastintų pasikartojančias užduotis. Makrofunkcijų sintaksės, naudojimo atvejų ir pranašumų supratimas suteikia programuotojams vertingą įrankį, skirtą optimizuoti savo kodų bazę ir skatinti švaresnę bei lengviau prižiūrimą C++ programą. Kruopščiai taikant ir laikantis geriausios praktikos, makrokomandos tampa neatsiejama kūrėjo įrankių rinkinio dalimi, kuri prisideda prie kodo efektyvumo ir priežiūros.