Põhierinevus – makro vs tekstisisene funktsioon
Makro on koodi fragment, mis on eelprotsessori direktiiv. Sisene funktsioon on C++ täiustusfunktsioon programmi täitmisaja minimeerimiseks. Seetõttu on peamine erinevus makro ja tekstisisese funktsiooni vahel see, et makrot kontrollib eelprotsessor, samas kui sisemist funktsiooni kontrollib kompilaator.
Makro on lisatud programmi algusesse, millele eelneb räsimärk. Kui programmis on makro nimi, asendatakse see makro sisuga.
Mis on makro?
Eelprotsessor on programm, mis töötleb lähtekoodi enne, kui see kompilaatorist läbi läheb. See töötab eelprotsessori käsurea või direktiivide abil. Programmis asetatakse eeltöötlejate käsud lähteprogrammi enne põhiprogrammi. Enne kui lähtekood kompilaatorist läbi läheb, kontrollib eeltöötleja seda eeltöötlusjuhiste osas. Eelprotsessori direktiividel on sümbol. Erinev alt teistest väidetest ei lõpe need semikooloniga. Üks eelprotsessori direktiivi tüüp on makro. Üldiselt kirjutatakse makrod suurtähtedega.
Joonis 01: C++ programm makrodega
Vastav alt ül altoodud programmile tähistavad rida 3 ja rida 4 makrosid. Pindala arvutamisel asendatakse PI väärtus määratletud makroga. Real 14, maht=CUBE(väärtus), laiendab eeltöötleja lauset kujul volume=(väärtusväärtusväärtus). Kuubi leidmise saab kirjutada funktsioonina, kuid siin kirjutatakse see makro abil. Kui on lause nagu maht=CUBE(x+y), siis see laieneb mahuks=(x+yx+yx+y).
Mõned programmeerimismärgid võivad kergesti olla valesti kirjutatud. Neid saab makrode abil asendada. nt. define AND &&, define VÕI ||. Makrodefinitsioon võib sisaldada ka selliseid väljendeid nagu define AREA 45.56.
Mis on tekstisisene funktsioon?
Kui funktsiooni kutsutakse, kulub kompilaatoril selle täitmiseks veidi aega. Kui funktsioon ei ole väga keeruline, saab programmeerija selle funktsiooni tekstisiseseks funktsiooniks teisendada. Vaadake allolevat programmi.
Joonis 02: Funktsioon ilma tekstisiseseta
Print_hello on lihtne funktsioon. Funktsiooni kutsumisel prindib see stringi "Tere". Selle funktsiooni täitmise aeg on 0,187 sekundit. Kui kasutate tekstisisest märksõna järgmiselt, väheneb täitmisaeg 0,064 sekundini.
Joonis 03: tekstisisene funktsioon
Seetõttu lüheneb inline märksõna kasutamisel täitmise aeg. Tekstisisesed funktsioonid ei pruugi töötada, kui on olemas tsüklid, lülituslaused ja kui funktsioon sisaldab staatilisi muutujaid või rekursiivseid funktsioone.
Mis vahe on makro- ja tekstisisesel funktsioonil?
Makro vs tekstisisene funktsioon |
|
Makro on koodi fragment, mis on eeltöötluse direktiiv, mis sisaldub programmi alguses, millele eelneb räsimärk. | Sisene funktsioon on C++ täiustusfunktsioon programmi täitmisaja minimeerimiseks. |
Hindamisaeg | |
Makro puhul hinnatakse argumenti iga kord, kui seda programmis kasutatakse. | Reases hinnatakse argumenti üks kord. |
Kontrollinud | |
Eelprotsessor kontrollib makrot. | Kompilaator kontrollib tekstisisest funktsiooni. |
Märksõna | |
Marco kasutab define. | Sisene funktsioon kasutab märksõna "inline". |
Kasutus | |
Makrot saab kasutada konstantide, avaldiste defineerimiseks, sõnasõnaliseks teksti asendamiseks ja funktsioonide defineerimiseks jne. | Programmi täitmisaja minimeerimiseks saab kasutada sisemist funktsiooni. |
Lõpetamine | |
Makro lõpeb uue reaga. | Sisene funktsioon lõpeb lokkis sulguga tekstisisese funktsiooni lõpus. |
Punkti määratlemine | |
A Marco on määratletud programmi alguses. | Sisene funktsioon võib olla klassi sees või väljaspool seda. |
Kokkuvõte – makro vs tekstisisene funktsioon
Selles artiklis käsitleti makro ja tekstisisese funktsiooni erinevust. Neid mõisteid kasutatakse C++ programmeerimises. Makro ja tekstisisese funktsiooni erinevus seisneb selles, et makrot kontrollib eelprotsessor, samas kui sisemist funktsiooni kontrollib kompilaator.