Skirtumas tarp „C ++“ intarpų ir makrokomandų

Autorius: Laura McKinney
Kūrybos Data: 2 Balandis 2021
Atnaujinimo Data: 14 Gegužė 2024
Anonim
Top 4 Dying Programming Languages of 2019 | by Clever Programmer
Video.: Top 4 Dying Programming Languages of 2019 | by Clever Programmer

Turinys


Makrokomanda yra instrukcija, kuri išplečiama jos kvietimo metu. Funkcijas taip pat galima apibrėžti, pavyzdžiui, makrokomandas. Panašiai, įtraukiamosios funkcijos taip pat plečiasi jo kreipimosi metu. Vienas pagrindinių skirtumų tarp įterptinės ir makro funkcijos yra tas, kad inline funkcijos yra išplėsti per kompiliacija, ir makrokomandas yra išplėsti, kai programą apdoroja pirminis procesorius.

Ištirkime skirtumą tarp įterptųjų ir makrokomandų palyginimo diagramos pagalba.

  1. Palyginimo diagrama
  2. Apibrėžimas
  3. Pagrindiniai skirtumai
  4. Išvada

Palyginimo diagrama

Palyginimo pagrindasInlineMakro
Pagrindinis Kompiliatorius analizuoja įtrauktas funkcijas.Makrokomandas išplečia pirminis procesorius.
Sintaksė„inline return_type funct_name“ (parametrai) {. . . }#define macro_name char_sequence
Naudoti raktiniai žodžiaiinline
#define
ApibrėžtaTai gali būti apibrėžta klasės viduje ar už jos ribų.Tai visada apibrėžiama programos pradžioje.
VertinimasArgumentas įvertinamas tik vieną kartą.Jis įvertina argumentą kiekvieną kartą, kai jis naudojamas kode.
Išplėtimas Kompiliatorius negali įterpti ir išplėsti visų funkcijų.Makros visada plečiamos.
AutomatikaTrumpos funkcijos, apibrėžtos klasės viduje, automatiškai paverčiamos vidinėmis funkcijomis.Makros turėtų būti apibrėžtos konkrečiai.
PrieigaInline nario funkcija gali pasiekti klasės duomenis.Makrokomandos niekada negali būti klasės nariais ir negali pasiekti klasės duomenų.
NutraukimasInline funkcijos apibrėžimas pasibaigia garbanėliais skliausteliuose inline funkcijos pabaigoje.Makro apibrėžimas baigiasi nauja linija.
DerinimasDerinti inline funkciją lengva, nes klaidų tikrinimas atliekamas kompiliavimo metu.Derinti makrokomandas tampa sudėtinga, nes kompiliavimo metu klaidų tikrinimas nevyksta.
ĮrišimasInline funkcija labai gerai susieja visus teiginius funkcijos tekste, nes funkcijos pradžia prasideda ir baigiasi garbanotomis skliausteliomis.Makrokomanda susiduria su įrišimo problema, jei joje yra daugiau nei vienas sakinys, nes ji neturi pabaigos simbolio.


„Inline“ apibrėžimas

Įdėtinė funkcija atrodo kaip įprasta funkcija, tačiau prieš ją eina raktinis žodis „inline“. „Inline“ funkcijos yra trumpo ilgio funkcijos, kurios išplečiamos jo kvietimo vietoje, o ne vadinamos. Supraskime netiesiogines funkcijas pavyzdžiais.

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

Aukščiau esančioje programoje aš deklaravau ir apibrėžiau, kad funkcija inicializuojama (), kaip neatsiejama funkcija klasėje „pavyzdys“. Inicijavimo () funkcijos kodas išsiplečia ten, kur jį iškviečia klasės „pavyzdys“ objektas. Funkcijos ekranas (), apibrėžtas klasės pavyzdyje, nedetalizuojamas, bet kompiliatorius jį gali laikyti inline C ++ klasėje apibrėžtą funkciją kompiliatorius automatiškai padaro inline, atsižvelgdamas į funkcijos ilgį.


  • „Inline“ funkcija sumažina papildomų funkcijų skambinimo ir grąžinimo išlaidas, o tai savo ruožtu sumažina programos vykdymo laiką.Be to, argumentai perkeliami į krūvą, o registrai išsaugomi, kai iškviečiama funkcija, ir iš naujo nustatomi, kai funkcija grįžta, o tam reikia laiko. To išvengia vidinės funkcijos, nes nereikia kiekvieną kartą kurti vietinių kintamųjų ir oficialių parametrų. .
  • „Inline“ funkcijos gali būti klasės nariu ir prieiti prie klasės duomenų nario.
  • „Inline“ funkcija sutrumpina programos vykdymo laiką, tačiau kartais, jei „inline“ funkcijos trukmė yra didesnė, programos dydis taip pat padidės dėl dubliuojamo kodo. Taigi labai gera praktika yra įtraukti labai mažas funkcijas.
  • Inline funkcijos argumentas įvertinamas tik vieną kartą.

Makro apibrėžimas

„Makro“ yra „pirminių procesorių direktyva“. Prieš kompiliavimą programą išnagrinėja pirminis procesorius ir, jei kada nors randa programoje esančią makrokomandą, ji pakeičia tą makrokomandą savo apibrėžimu. Taigi makrokomanda laikoma „pakaitalu“. Studijuokime makrokomandą su pavyzdžiu.

# įtraukti #define GREATER (a, b) ((a <b)? b: a) int main (void) {cout << "Didesnė iš 10 ir 20 yra" << Didesnė ("20", "10") << " n"; grįžti 0; }

Aukščiau esančiame kode paskelbiau makrofunkciją GREATER (), kuri lygina ir nustato didesnį abiejų parametrų skaičių. Galite pastebėti, kad nėra kabliataškio, kuris nutrauktų makrokomandą, nes makrokomandą nutraukia tik nauja eilutė. Kadangi makrokomanda yra tik pakaitalas, ji išplečia makrokomandos kodą ten, kur ji naudojama.

  • Makrokomandos visada apibrėžiamos didžiosiomis raidėmis tik tam, kad programuotojams būtų lengva atpažinti visas programos makrokomandas skaitant.
  • Makrokomanda niekada negali būti klasės nario funkcija, ji taip pat negali pasiekti bet kurios klasės duomenų narių.
  • Makro funkcija įvertina argumentą kiekvieną kartą, kai jis pasirodo apibrėžime, ir gaunamas netikėtas rezultatas.
  • Makrokomanda turi būti mažesnio dydžio, nes didesnės makrokomandos be reikalo padidins kodo dydį.
  1. Pagrindinis skirtumas tarp intarpų ir makrokomandų yra tas, kad kompiliatorius analizuoja įtrauktas funkcijas, tuo tarpu programos makrokomandos yra išplėstos pirminio procesoriaus.
  2. Inline funkcijai apibrėžti naudojamas raktinis žodis yra „inline“Kadangi makrokomandai apibrėžti naudojamas raktinis žodis yra„#define“.
  3. Kai „inline“ funkcija yra vienos klasės ženklas, ją galima apibrėžti klasės viduje arba už jos ribų. Kita vertus, makrokomanda visada apibrėžiama programos pradžioje.
  4. Integruotoms funkcijoms perduotas argumentas kompiliavimo metu įvertinamas tik vieną kartą, tuo tarpu makrokomandų argumentas įvertinamas kiekvieną kartą, kai kodekse naudojama makrokomanda.
  5. Kompiliatorius negali įterpti ir išplėsti visų klasės viduje apibrėžtų funkcijų. Kita vertus, makrokomandos visada plečiamos.
  6. Trumposios funkcijos, kurios apibrėžiamos klasės viduje be įterptinių raktinių žodžių, automatiškai tampa vidinėmis funkcijomis. Kita vertus, „Macro“ turėtų būti apibrėžtas konkrečiai.
  7. Inline funkcija gali pasiekti klasės narius, o makrokomanda niekada negali pasiekti klasės narių.
  8. Norėdami nutraukti linijinę funkciją, reikalinga uždara garbanų apyrankė, tuo tarpu makrokomanda nutraukiama pradėjus naują eilutę.
  9. Derinti „inlne“ funkciją tapo lengva, nes kompiliavimo metu tikrinama, ar nėra klaidų. Kita vertus, makrokomanda nėra tikrinama kompiliavimo metu, todėl makrokomanda suderinti tampa sudėtinga.
  10. Būdama funkcija, linijinė funkcija suriša savo narius pradiniame ir uždarame garbanų breketuose. Kita vertus, makrokomanda neturi jokio baigimo simbolio, todėl susieti tampa sunku, kai makrokomandoje yra daugiau nei vienas sakinys.

Išvados:

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