Rekomenduojama, 2024

Redaktoriaus Pasirinkimas

Skirtumas tarp Inline ir Macro C ++

Makrokomandas - tai nurodymas, kuris plečiasi jo paskelbimo metu. Taip pat galima apibrėžti funkcijas, pvz., Makrokomandas. Panašiai inline funkcijos taip pat plečiasi jos iškėlimo vietoje. Vienas iš pagrindinių skirtumų tarp inline ir makro funkcijų yra tai, kad inline funkcijos yra išplėstos kompiliavimo metu, o makrokomandos išplėstos, kai programą apdoroja išankstinis apdorojimas .

Leiskite studijuoti skirtumą tarp inline ir makro palyginimo lentelės pagalba.

Palyginimo diagrama

Palyginimo pagrindasInlineMakro
PagrindinisInline funkcijas analizuoja kompiliatorius.Makrokomandas išplėstas išankstinio apdorojimo įrenginio.
Sintaksėinline return_type funct_name (parametrai) {. . . }#define makro_vardas char_sequence
Naudojami raktiniai žodžiaiinline
#define
ApibrėžtaJis gali būti apibrėžtas klasės viduje ar už jos ribų.Jis visada apibrėžiamas programos pradžioje.
VertinimasJis vertina argumentą tik vieną kartą.Jis įvertina argumentą kiekvieną kartą, kai jis naudojamas kode.
PlėtraKompiliatorius negali įterpti ir išplėsti visų funkcijų.Makrokomandos visada plečiamos.
AutomatikaTrumpos funkcijos, apibrėžtos klasės viduje, automatiškai nustatomos į eilutes.Makrokomandos turėtų būti konkrečiai apibrėžtos.
PrieigaInline nario funkcija gali pasiekti klasės klasės narius.Makrokomandas niekada negali būti klasės nariais ir negali pasiekti duomenų klasės narių.
NutraukimasInline funkcijos apibrėžimas baigiamas garbanotais skliaustais, esančiais vidinės funkcijos pabaigoje.Makro apibrėžimas baigiasi nauja linija.
DerinimasDerinimo funkcija yra lengva, nes klaidų tikrinimas atliekamas kompiliavimo metu.Derinimas tampa sunku makrokomandoms, nes kompiliavimo metu nėra klaidų tikrinimo.
ĮrišimasInline funkcija susieja visus funkcijos elemento teiginius labai gerai, kaip funkcijos pradžia ir baigiasi garbanotais skliaustais.Makro susiduria su privaloma problema, jei ji turi daugiau nei vieną pareiškimą, nes ji neturi užbaigimo simbolio.

Inline apibrėžimas

Inline funkcija atrodo kaip įprastinė funkcija, bet prieš ją yra raktinis žodis „ inline “. Inline funkcijos yra trumpo ilgio funkcijos, kurios yra išplėstos jo iškvietimo vietoje, o ne vadinamos. Suprasime inline funkcijas su pavyzdžiu.

 #įtraukti naudojant vardų sritį std; klasės pavyzdys {int a, b; viešas: inline void inicializuoti (int x, int y) {a = x; b = y} void display () {cout << a << "" < 

Pirmiau pateiktoje programoje aš deklaravau ir apibrėžiau funkcijų inicijavimą (), kaip eilės funkciją klasėje „pavyzdys“. Inicializacijos () funkcijos kodas bus išplėstas, kai jį remsis klasės „pavyzdys“ objektas. Klasės pavyzdyje apibrėžtas funkcijų rodmuo () nėra deklaruojamas, tačiau kompiliatorius gali būti laikomas inline. C + + klasėje apibrėžta funkcija automatiškai įtraukiama į kompiliatorių, atsižvelgiant į funkcijos trukmę.

  • Inline funkcija sumažina funkcijų skambinimo ir grąžinimo pridėtines vertes, o tai savo ruožtu sumažina programos vykdymo laiką. Be to, argumentai yra stumiami ant kamino ir registrai išsaugomi, kai funkcija vadinama ir iš naujo nustatoma, kai funkcijų grąžinimas, kuriam reikia laiko, tai vengiama inline funkcijomis, nes nereikia kurti vietinių kintamųjų ir formalių parametrų .
  • Inline funkcijos gali būti klasės nariu ir taip pat gali pasiekti klasės duomenų narį.
  • Inline funkcija sumažina programos vykdymo laiką, tačiau kartais, jei inline funkcija yra ilgesnė, programos dydis taip pat padidės dėl dubluoto kodo. Taigi, tai yra gera praktika įvesti labai mažas funkcijas.
  • Inline funkcijos argumentas vertinamas tik vieną kartą.

Makro apibrėžimas

Makro yra „išankstinio apdorojimo direktyva“. Prieš rengiant programą, ją išnagrinėja išankstinis apdorojimas ir, kai jis kada nors suranda makrokomandą programoje, tai pakeičia makrokomandą jo apibrėžimu. Taigi makro laikoma „teksto pakeitimu“. Studijuokite makrokomandą pavyzdžiu.

 #include #define GREATER (a, b) ((a <b)? b: a) int main (void) {cout << "Didesnis iš 10 ir 20 yra" << GREATER ("20", "10") << "n"; grąža 0; } 

Pirmiau pateiktame kode paskelbiau makro funkciją GREATER (), kuri lygina ir suranda didesnį abiejų parametrų skaičių. Galite pastebėti, kad nėra semikolo, kad būtų nutrauktas makrokomandas, nes makrokomandą nutraukia tik nauja eilutė. Kadangi makro yra tik teksto pakeitimas, jis išplės makro kodą, kur jis bus naudojamas.

  • Makrokomandos visada apibrėžiamos didžiosiomis raidėmis, kad programuotojai galėtų lengvai nustatyti visas programos makrokomandas skaitymo metu.
  • Makro niekada negali būti klasės nario funkcija, taip pat ji negali pasiekti bet kurios klasės duomenų narių.
  • Makro funkcija vertina argumentą kiekvieną kartą, kai jis pasirodo apibrėžime, dėl kurio atsiranda netikėtas rezultatas.
  • Makro dydis turi būti mažesnis, nes didesnės makros nereikalingai padidins kodo dydį.

Pagrindiniai skirtumai tarp inline ir makro

  1. Pagrindinis skirtumas tarp inline ir makrokomandų yra tas, kad kompiliatorius analizuoja inline funkcijas, o makrokomandas programoje yra išplėstas išankstinio apdorojimo būdu.
  2. Raktinis žodis, naudojamas apibrėžti inline funkciją, yra „ inline “, o raktinis žodis, naudojamas makro apibrėžimui, yra „ #define “.
  3. Kai inline funkcija yra dekalre klasėje, ji gali būti apibrėžta klasėje arba už klasės ribų. Kita vertus, makro visuomet nustatoma programos pradžioje.
  4. Argumentai, perduodami eilutėms, yra vertinami tik vieną kartą, o makrokomandos argumentai vertinami kiekvieną kartą, kai kode naudojamas makrokomandas.
  5. Kompiliatorius negali įterpti ir išplėsti visų klasės viduje apibrėžtų funkcijų. Kita vertus, makrokomandos visada plečiamos.
  6. Trumpa funkcija, apibrėžta klasės viduje be vidinio raktinio žodžio, yra automatiškai įjungtos. Kita vertus, makro turėtų būti apibrėžta konkrečiai.
  7. Funkcija, kuri yra inline, gali pasiekti klasės narius, o makro niekada negali pasiekti klasės narių.
  8. Norint nutraukti inline funkciją, reikalinga uždara garbanotoji sąvarža, o makro pabaiga - naujos eilutės pradžia.
  9. Debugging tampa lengva, kad būtų galima atlikti funkciją, nes ji tikrinama kompiliavimo metu. Kita vertus, makrokomandas nėra patikrinamas kompiliavimo metu, todėl sunku derinti makrokomandą.
  10. Būdama funkcija, inline funkcija susieja savo narius pradžioje ir uždaro garbanotas petnešos. Kita vertus, makrokomandoje nėra jokio nutraukimo simbolio, todėl privaloma tapti sudėtinga, kai makrokomandoje yra daugiau nei vienas pareiškimas.

Išvados:

Inline funkcijos yra daug labiau įtikinamos nei makro funkcija. C ++ taip pat suteikia geresnį būdą apibrėžti konstantą, kuris naudoja raktinį žodį „const“.

Top