Pagrindinis skirtumas – makrokomandos ir įterptoji funkcija
Makrokomandas yra kodo fragmentas, kuris yra išankstinio procesoriaus direktyva. Inline funkcija yra C++ patobulinimo funkcija, skirta sutrumpinti programos vykdymo laiką. Todėl pagrindinis skirtumas tarp makrokomandos ir įterptosios funkcijos yra tas, kad makrokomandą tikrina išankstinis procesorius, o eilutę – kompiliatorius.
Makrokomandos yra įtrauktos į programos pradžią, prieš kurią yra maišos ženklas. Kai programoje yra makrokomandos pavadinimas, jis pakeičiamas makrokomandos turiniu.
Kas yra makrokomandos?
Išankstinis procesorius yra programa, kuri apdoroja š altinio kodą prieš jam pereinant per kompiliatorių. Jis veikia naudodamas išankstinio procesoriaus komandinę eilutę arba direktyvas. Programoje pirminio procesoriaus direktyvos dedamos į š altinio programą prieš pagrindinę programą. Prieš š altinio kodui pereinant per kompiliatorių, pirminis procesorius patikrina, ar nėra pirminio procesoriaus nurodymų. Pirminio procesoriaus nurodymai turisimbolį. Skirtingai nuo kitų teiginių, jie nesibaigia kabliataškiu. Viena iš pirminio procesoriaus direktyvų tipų yra makrokomandos. Paprastai makrokomandos rašomos didžiosiomis raidėmis.
01 pav.: C++ programa su makrokomandomis
Pagal pirmiau pateiktą programą, 3 ir 4 eilutės nurodo makrokomandas. Skaičiuojant plotą, PI reikšmė pakeičiama naudojant apibrėžtą makrokomandą. 14 eilutėje volume=CUBE(value), išankstinis procesorius išplečia teiginį kaip volume=(reikšmėreikšmėreikšmė). Kubo radimas gali būti parašytas kaip funkcija, tačiau čia jis parašytas naudojant makrokomandą. Jei yra teiginys, kaip tūris=CUBE(x+y), tada jis išsiplės iki tomas=(x+yx+yx+y).
Kai kurie programavimo prieigos raktai gali būti lengvai įvesti klaidingai. Juos galima pakeisti naudojant makrokomandas. pvz. define AND &&, define OR ||. Makrokomandos apibrėžimas taip pat gali apimti tokias išraiškas kaip define AREA 45.56.
Kas yra eilutės funkcija?
Kai funkcija iškviečiama, kompiliatorius užtrunka šiek tiek laiko ją vykdyti. Jei funkcija nėra labai sudėtinga, programuotojas gali konvertuoti funkciją į tiesioginę funkciją. Žiūrėkite toliau pateiktą programą.
02 pav. Funkcija be eilės
Print_hello yra paprasta funkcija. Iškviečiant funkciją, ji išspausdina eilutę „Labas“. Šios funkcijos vykdymo laikas yra 0,187 s. Naudojant įterptinį raktinį žodį, kaip nurodyta, vykdymo laikas sutrumpėja iki 0,064 s.
03 pav.: eilutinė funkcija
Todėl, naudojant įterptinį raktinį žodį, vykdymo laikas sutrumpėja. Įterptinės funkcijos gali neveikti, jei yra kilpų, perjungimo sakinių ir jei funkcijoje yra statinių kintamųjų arba rekursinių funkcijų.
Kuo skiriasi makrokomandos ir eilutės funkcijos?
Makrokomandos prieš eilutę funkciją |
|
Makrokomandas yra kodo fragmentas, kuris yra išankstinio procesoriaus direktyva, įtraukta į programos pradžią, prieš kurią yra maišos ženklas. | Inline funkcija yra C++ patobulinimo funkcija, skirta sutrumpinti programos vykdymo laiką. |
Vertinimo laikas | |
Makrokomandoje argumentas įvertinamas kiekvieną kartą, kai jis naudojamas programoje. | Eilėje argumentas įvertinamas vieną kartą. |
Patikrino | |
Makrokomandą patikrina išankstinis procesorius. | Inline funkciją patikrina kompiliatorius. |
Raktinis žodis | |
Marco naudoja define. | Inline funkcija naudoja raktinį žodį „inline“. |
Naudojimas | |
Makrokomandą galima naudoti norint apibrėžti konstantas, išraiškas, pakeisti pažodinį tekstą ir apibrėžti funkcijas ir pan. | Galima naudoti eilutę funkciją, kad būtų sumažintas programos vykdymo laikas. |
Nutraukimas | |
Makrokomandas baigiasi nauja eilute. | Inline funkcija baigiasi lenktu skliaustu įterptosios funkcijos pabaigoje. |
Apibrėžimo taškas | |
A Marco apibrėžiamas programos pradžioje. | Inline funkcija gali būti klasėje arba už jos ribų. |
Santrauka – makrokomandos ir įterptoji funkcija
Šiame straipsnyje aptariamas makrokomandos ir įterptosios funkcijos skirtumas. Šios sąvokos naudojamos programuojant C++. Skirtumas tarp makrokomandos ir įterptosios funkcijos yra tas, kad makrokomandą tikrina išankstinis procesorius, o eilutę – kompiliatorius.