Soovitatav, 2021

Toimetaja Valik

Erinevus Inline ja Macro vahel C ++ -is

Makro on käsk, mis laieneb selle kutsumise ajal. Samuti saab määratleda funktsioone, näiteks makroid. Sarnaselt laienevad ka sisseehitatud funktsioonid selle kutsumise hetkel. Üks peamine erinevus inline- ja makrofunktsioonide vahel on see, et inline-funktsioone laiendatakse kompileerimise ajal ja makroid laiendatakse, kui programmi töödeldakse eelprotsessoriga .

Uurime võrdluse ja makro vahelist erinevust võrdluskaardi abil.

Võrdluskaart

Võrdluse alusJärjekorrasMakro
PõhilineInline funktsioone arendab kompilaator.Makroreid laiendab eelprotsessor.
Süntaksiinline return_type funct_name (parameetrid) {. . . }#define makro_nimi char_sequence
Kasutatud märksõnadjärjekorras
#define
MääratletudSeda saab määratleda klassi sees või väljaspool.See määratletakse alati programmi alguses.
HindamineSee hindab argumenti ainult üks kord.See hindab argumenti iga kord, kui seda koodi kasutatakse.
LaiendamineKoostaja ei pruugi kõiki funktsioone sisestada ja laiendada.Makroid laiendatakse alati.
AutomaatikaKlassis määratletud lühikesed funktsioonid tehakse automaatselt inline-funktsioonidele.Makrod tuleks määratleda konkreetselt.
JuurdepääsInline liikmefunktsioon saab juurdepääsu klassi andmete liikmetele.Makrosid ei saa kunagi olla klassi liikmed ega pääse klassi andmete liikmetele juurde.
LõpetamineSisefunktsioonide määratlus lõpeb sirgete sulgudega inline funktsiooni lõpus.Makro määratlus lõpeb uue reaga.
SilumineSilumine on inline funktsiooni jaoks lihtne, kuna vea kontrollimine toimub koostamise ajal.Silumine muutub makrode jaoks keeruliseks, kuna kompileerimise ajal vea kontrollimine ei toimu.
KöitmineInline funktsioon seob kõik funktsiooni kehas olevad avaldused väga hästi, kui funktsiooni keha algab ja lõpeb lokkis sulgudega.Makro seisab silmitsi sidumisprobleemiga, kui tal on rohkem kui üks avaldus, kuna sellel ei ole lõpetamise sümbolit.

Inline'i määratlus

Sisemine funktsioon näeb välja nagu tavaline funktsioon, kuid sellele eelneb märksõna „ inline “. Inline-funktsioonid on lühikese pikkusega funktsioonid, mida laiendatakse selle kutsumise asemel. Mõistame inline funktsioone koos näitega.

 #kasuta nimeruumi std; klassi näide {int a, b; avalik: inline void initialize (int x, int y) {a = x; b = y} tühine kuva () {cout << a << "" < 

Ülaltoodud programmis teatasin ja defineerisin funktsiooni initsialiseerimise () inline funktsiooni klassis „näide”. Initsialiseerimis- () funktsiooni kood laieneb, kui seda kasutab klassi „näide” objekt. Klassi näites defineeritud funktsiooninäit () ei deklareerita inline, kuid kompilaator võib seda pidada inlineiks, nagu C ++-s klassifitseeritakse funktsioon, mis klassi sees on defineeritud, automaatselt, võttes arvesse funktsiooni pikkust.

  • Sisemine funktsioon vähendab funktsiooni helistamise ja tagastamise üldkulusid, mis omakorda vähendab programmi teostamise aega. Samuti lükatakse argumendid virnale ja registrid salvestatakse, kui funktsiooni kutsutakse ja lähtestatakse, kui funktsionaalset tagasipöördumist, mis võtab aega, seda inline-funktsioonidega vältida, kuna puudub vajadus luua kohalikke muutujaid ja formaalseid parameetreid iga kord .
  • Inline-funktsioonid võivad olla klassi liikmed ja samuti saavad nad juurdepääsu klassi andmete liikmele.
  • Inline funktsioon vähendab programmi teostamise aega, kuid mõnikord, kui inline funktsiooni pikkus on suurem, suureneb ka programmi suurus dubleeritud koodi tõttu. Seega on hea tava väga väikeste funktsioonide sisestamiseks.
  • Inline funktsiooni argumenti hinnatakse ainult üks kord.

Makro mõiste

Makro on „eelprotsessorite direktiiv”. Enne kompileerimist uurib programmi eelprotsessor ja kui see programm makrot leiab, asendab see selle makro selle määratlusega. Seega peetakse makro „teksti asendamiseks“. Uurige makro eeskujuga.

 #include #define GREATER (a, b) ((a <b)? b: a) int main (void) {cout << "Suurem 10 ja 20 on" << GREATER ("20", "10") << "n"; tagastamine 0; } 

Ülaltoodud koodis kuulutasin välja makrofunktsiooni GREATER (), mis võrdleb ja leiab mõlema parameetri suurema arvu. Saate täheldada, et makro lõpetamiseks pole semikoolonit, kuna makro lõpetatakse ainult uue rea abil. Kuna makro on lihtsalt teksti asendaja, laiendab see makro koodi, kus seda kasutatakse.

  • Makroid määratletakse alati suurtähtedega, et programmeerijatel oleks lihtne lugeda kõiki programmi makroid lugemise ajal.
  • Makro ei saa kunagi olla klassi liikmefunktsioon ega pääse ühegi klassi andmete liikmetele.
  • Makrofunktsioon hindab argumenti iga kord, kui see ilmneb selle määratluses, mille tulemuseks on ootamatu tulemus.
  • Makro peab olema väiksema suurusega, kuna suuremad makrod suurendavad asjatult koodi suurust.

Inline ja makro vahelised peamised erinevused

  1. Peamine erinevus inline ja makro vahel on see, et kompileerija tõlgendab inline-funktsioone, samas kui programmi makroid laiendavad eelprotsessor.
  2. Inline funktsiooni määratlemiseks kasutatav märksõna on “ inline ”, samas kui makro määratlemiseks kasutatav märksõna on „ #define “.
  3. Kui inline-funktsioon on klassi sees, võib selle määratleda kas klassi sees või väljaspool klassi. Teisest küljest määratletakse makro alati programmi alguses.
  4. Inline-funktsioonidele edastatud argumentide hindamine toimub ainult üks kord, samas kui makrode argumenti hinnatakse iga kord, kui koodis makro kasutatakse.
  5. Koostaja ei pruugi kõiki klassis määratletud funktsioone sisestada ja laiendada. Teisest küljest laiendatakse makroid alati.
  6. Lühike funktsioon, mis on defineeritud klassi sees ilma sisemise võtmesõnaga, tehakse automaatselt inline-funktsioonideks. Teisest küljest tuleks makro määratleda konkreetselt.
  7. Funktsioon, mis on inline, pääseb klassi liikmetele, samas kui makro ei pääse kunagi klassi liikmetele.
  8. Sisefunktsiooni lõpetamiseks on vajalik suletud lokkis, samal ajal kui makro lõpetatakse uue rea algusega.
  9. Silumine muutub lihtsaks funktsiooni jaoks, kuna seda kontrollitakse koostamise ajal mis tahes vea korral. Teisest küljest ei kontrollita kompileerimise ajal makro, makro silumine muutub keeruliseks.
  10. Funktsioonina seovad inline funktsioon oma liikmeid alguses ja suletud lokkis. Teisest küljest ei ole makro puhul ühtegi lõpetamise sümbolit, mistõttu sidumine muutub keeruliseks, kui makro sisaldab rohkem kui üht avaldust.

Järeldused:

Sisemised funktsioonid on palju veenvamad kui makrofunktsioon. C ++ annab ka parema võimaluse konstanti määratlemiseks, mis kasutab märksõna.

Top