C++ makrofunktsioonid

C Makrofunktsioonid



C++ programmeerimises on makrofunktsioonid võimas tööriist koodi paindlikkuse ja tõhususe suurendamiseks. Makro toimib lähtekoodis kohahoidjana, asendades selle vastava väärtusega eeltöötleja poolt enne tegelikku kompileerimisprotsessi. Makrode lähtestamine toimub käsu #define abil ja neid saab eemaldada käsuga #undef. Need makrod võimaldavad arendajatel määratleda korduvkasutatavad koodilõigud, lihtsustades korduvaid ülesandeid hõlpsalt. Selles artiklis käsitletakse makrofunktsioonide üksikasju, valgustades nende omadusi, kasutusjuhtumeid ja võimalikke eeliseid.

Mis on makrofunktsioon?

Makrofunktsioon on C++-koodi väike korduvkasutatav komponent, mis on kirjutatud käskkirjaga #define. Makro toimib tekstilise asendusmehhanismina, kus selle nime mis tahes esinemine koodis asendatakse eeltöötlusfaasi ajal selle määratletud koodiplokiga. Makrofunktsioonid on eriti kasulikud korduvate toimingute, parameetritega toimingute ja erinevate stsenaariumitega kohandamist nõudva koodi käsitlemisel.







Makrofunktsiooni süntaks:

Makrofunktsiooni määratlemise süntaks hõlmab käskkirja #define kasutamist, millele järgneb makro nimi, parameetrite loend (kui see on olemas) ja koodiplokk. Siin on põhinäide:



# määrake Squre ( ruut ) ( ( ruut ) * ( ruut ) )



Selles näites on „Squre” makrofunktsioon, mis võtab ühe parameetri „sq” ja arvutab selle ruudu. Topeltsulud tagavad õige hindamise, eriti kui parameeter hõlmab avaldisi.





Liigume nüüd näidete jaotisse, et õppida, millal kasutada makrofunktsiooni C++ programmis.

C++ makrofunktsioonide rakendused

Makrofunktsioonid omavad tähtsust erinevates programmeerimisstsenaariumides, pakkudes arendajatele mitmekülgset koodi optimeerimise ja lihtsustamise tööriista. Uurime mõningaid mõjuvaid kasutusjuhtumeid, mis tõstavad esile C++ makrofunktsioonide tõhususe.



1. stsenaarium: koodi korduvkasutatavus

Makrofunktsioonid on suurepärased stsenaariumides, kus teatud koodimustrit korratakse kogu programmis. Koodi makrosse kapseldades saavad arendajad seda vaevata uuesti kasutada, edendades puhtamat ja paremini hooldatavat koodi. Järgmises etteantud programmis kasutame makrofunktsiooni antud arvude mitmekordsete summade arvutamiseks. Vaatame kõigepealt koodi ja seejärel selgitame seda üksikasjalikult:

#include

kasutades nimeruumi std;



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



int main ( ) {



int summa1 ADD ( 9 , 3 ) ;

cout << '9 ja 3 summa on =' << summa1 << endl;



int sum2 ADD ( üksteist , 7 ) ;

cout << '11 ja 7 summa on =' << summa2 << endl;



int cd = 8 , wx = 4 ;



int summa3 = LISA ( cd , wx ) ;

cout << '8 ja 4 summa on =' << summa3 << endl;



tagasi 0 ;

}

Päisefail „#include ” pakub funktsioone sisend- ja väljundtoimingute jaoks, nagu cout ja cin. '#define ADD(ab, yz) ((ab) + (yz))' määratleb makrofunktsiooni nimega ADD, millel on kaks argumenti 'ab' ja 'yz'. Makro kasutab eelprotsessori direktiivi, mis on #define, et asendada kompileerimise ajal mis tahes ADD(ab, yz) esinemine tegeliku avaldisega (ab) + (yz). Programmi sisenemispunkt, kust koodi täitmine algab, on 'int main()'.

ADD makro abil arvutame kaks summat: üks on 9 ja 3 ning teine ​​on 11 ja 7. Nende kahe summa puhul edastame arvud otse ADD makrosse. Kolmanda summa puhul anname aga numbri edasi muutujate abil. Numbrid 8 ja 4 salvestatakse vastavalt muutujatesse “cd” ja “wx”, mis edastatakse hiljem ADD-makrosse.

'int summa1 = ADD(9, 3);' rida määrab muutujale “sum1” summad 9 ja 3. Makro ADD(9, 3) asendatakse kompileerimise ajal 9 + 3-ga, mille tulemuseks on väärtus 8, mis salvestatakse kaustas „summa1”. 'int summa2 = ADD(11, 7);' rida demonstreerib makro taaskasutamist erinevate argumentidega. Summa2-s jäetakse kokku 11 ja 7.

Lõpuks 'int cd = 8, wx = 4; int summa3 = ADD(cd, wx);” näide näitab muutujatega makro kasutamist. Väärtusi „cd” ja „wx” kasutatakse ADD argumentidena, mille tulemusel määratakse summa väärtuses „sum3”. Siin on väljund:

Nagu selles näites näete, võtab makrofunktsioon ADD kaks parameetrit. See teostab lisamistoimingu, tutvustab selle kasutamist erinevate väärtuste ja muutujatega ning prindib tulemused konsooli. Seda makrofunktsiooni kasutades saame lisamisloogikat kogu programmis lihtsalt uuesti kasutada. See edendab puhtamat ja paremini hooldatavat koodi, eriti kui sama lisamistoimingut on vaja mitmes kohas.

2. stsenaarium: parameetritega toimingud

Makrofunktsioonid on varustatud parameetritega, mis võimaldavad arendajatel luua üldise koodi, mis on võimeline kohanema erinevate sisendväärtustega. See on eriti kasulik toimingute puhul, mida tuleb teha muutuvate parameetritega. Vaatame järgmist näidet:

#include

kasutades nimeruumi std;



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



int main ( ) {



int max1 = MAXI ( 9 , 3 ) ;

cout << max1 << ' on maksimum vahemikus 9 kuni 3' << endl << endl;



int kl = 12 , St = 9 ;

int max2 = MAXI ( kl, st ) ;

cout << max2 << ' on maksimaalne vahemikus ' << juures << ' ja ' << St << endl << endl;



int max3 = MAXI ( 3 * kl, kolmapäeval + 5 ) ;

cout << max3 << 'on maksimaalne väärtus vahemikus 3 *' << juures << ' ja ' << St << '+5' << endl;



tagasi 0 ;

}



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

See rida määratleb makrofunktsiooni nimega MAXI, mis võtab kaks parameetrit 'ab' ja 'yz' ning tagastab kahest väärtusest maksimumi, kasutades kolmekomponentset operaatorit.

Kasutades konstantidega makrofunktsiooni, int max1 = MAXI(9, 3), arvutame maksimaalse arvu vahemikus 9 kuni 3 ja tulemus salvestatakse lahtrisse “max1”. Seejärel kuvatakse tulemus konsoolil.

Kasutades makrofunktsiooni muutujatega “kl” ja “st”, salvestatakse nendesse muutujatesse kaks numbrit, mis seejärel edastatakse MAXI makrofunktsioonile, et leida nende vahel maksimaalne arv. Makrofunktsiooni kasutatakse uuesti koos muutujatega 'kl' ja 'st', mis näitab, et see töötab nii konstantide kui ka muutujatega. Makrofunktsiooni rakendatakse avaldisele (3 * kl ja st + 5), mis näitab selle kohanemisvõimet erinevate sisenditüüpidega. Selle koodi käivitamisel peaksite nägema järgmist väljundit:

Antud näites määrab MAXI makrofunktsioon kahe arvu maksimaalse väärtuse. Põhifunktsioon demonstreerib selle makro kasutamist konstantsete väärtuste, muutujate ja isegi avaldistega. Seejärel kuvatakse tulemus konsoolil. See näitab, kuidas MAXI makrofunktsioon kohandub erinevate sisendväärtuste ja avaldistega, pakkudes üldist mehhanismi maksimaalse väärtuse leidmiseks.

3. stsenaarium: tingimuslik koostamine

Makrod on olulised koodi teatud osade sisse- või väljalülitamisel kompileerimise ajal. See on kasulik platvormipõhise koodi lisamiseks või funktsioonide lülitite haldamiseks.

#include

#define DEBUG_MODE

int main ( ) {
#ifdef DEBUG_MODE
std::cout << 'Hei, Kalsoom! Silumisrežiim on lubatud.' << std::endl;
#endif

tagasi 0 ;
}

Selles näites määratleb rida '#define DEBUG_MODE' makro nimega DEBUG_MODE. Kui see rida on kommenteerimata, tähendab see, et silumisrežiim on lubatud. Kui seda kommenteeritakse, on silumisrežiim keelatud. Direktiiv „#ifdef DEBUG_MODE” kontrollib, kas makro DEBUG_MODE on määratletud. Kui see on määratletud (kommenteerimata), kaasatakse kompileerimise ajal koodide #ifdef ja #endif kood. Kui see pole määratletud (kommenteeritud), jäetakse see osa koodist välja.

See tingimusliku kompileerimise tehnika on võimas erinevatel kompileerimisseadetel põhinevate koodivariatsioonide haldamiseks. Seda kasutatakse tavaliselt silumiseks, kus silumisspetsiifiline kood lisatakse ainult vajaduse korral ning seda saab hõlpsasti sisse või välja lülitada, määratledes või kommenteerides vastavat makrot. Vaadake järgmist väljundit:

Nagu näete, on #ifdef ja #endif vaheline kood käivitatud ja konsooli prinditud, kuvades 'Hei, Kalsoom! Silumisrežiim on lubatud” teade. Makrofunktsioonid lihtsustavad koodibaasis järjepidevate muudatuste tegemise protsessi. Kui muudatus on vajalik, tagab makro definitsiooni muutmine, et muudatust rakendatakse ühtlaselt kõikjal, kus makrot kasutatakse.

Järeldus

Kokkuvõtteks võib öelda, et C++ makrofunktsioonid pakuvad võimsat mehhanismi koodi paindlikkuse ja tõhususe suurendamiseks. Arendajad saavad koodiplokkide kapseldamiseks, korduvkasutatavuse edendamiseks ja korduvate toimingute sujuvamaks muutmiseks kasutada #define direktiivi. Makrofunktsioonide süntaksi, kasutusjuhtude ja eeliste mõistmine annab programmeerijatele väärtusliku tööriista koodibaasi optimeerimiseks ning puhtama ja hooldatavama C++ programmi edendamiseks. Läbimõeldud rakendamise ja parimate tavade järgimise kaudu muutuvad makrofunktsioonid arendaja tööriistakomplekti lahutamatuks osaks, mis aitab kaasa koodi tõhususele ja hooldatavusele.