Skirtumas tarp „C ++“ intarpų ir makrokomandų
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.
- Palyginimo diagrama
- Apibrėžimas
- Pagrindiniai skirtumai
- Išvada
Palyginimo diagrama
Palyginimo pagrindas | Inline | Makro |
---|---|---|
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žiai | inline | #define |
Apibrėžta | Tai gali būti apibrėžta klasės viduje ar už jos ribų. | Tai visada apibrėžiama programos pradžioje. |
Vertinimas | Argumentas į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. |
Automatika | Trumpos funkcijos, apibrėžtos klasės viduje, automatiškai paverčiamos vidinėmis funkcijomis. | Makros turėtų būti apibrėžtos konkrečiai. |
Prieiga | Inline nario funkcija gali pasiekti klasės duomenis. | Makrokomandos niekada negali būti klasės nariais ir negali pasiekti klasės duomenų. |
Nutraukimas | Inline funkcijos apibrėžimas pasibaigia garbanėliais skliausteliuose inline funkcijos pabaigoje. | Makro apibrėžimas baigiasi nauja linija. |
Derinimas | Derinti inline funkciją lengva, nes klaidų tikrinimas atliekamas kompiliavimo metu. | Derinti makrokomandas tampa sudėtinga, nes kompiliavimo metu klaidų tikrinimas nevyksta. |
Įrišimas | Inline 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 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į. „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 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. Inline funkcijos yra daug įtikinamesnės nei makro funkcijos. „C ++“ taip pat suteikia geresnį būdą apibrėžti konstantą, kuri naudoja „const“ raktinį žodį.
Makro apibrėžimas
Išvados: