Erinevus C ++ tekstisisese ja makro vahel
Sisu
Makro on juhend, mis laieneb selle kutsumise ajal. Funktsioone saab ka määratleda, näiteks makrosid. Sarnaselt laienevad ka sisemised funktsioonid kutsumise hetkel. Üks esmane erinevus sisemise ja makrofunktsiooni vahel on see, et sisemised funktsioonid on laiendatud ajal koostamine, ja makrod laiendatakse, kui programm töötleb eeltöötleja.
Uurime võrdleva diagrammi abil erinevust tekstisisese ja makro vahel.
- Võrdlusdiagramm
- Definitsioon
- Peamised erinevused
- Järeldus
Võrdlusdiagramm
Võrdluse alus | Järjekorras | Makro |
---|---|---|
Põhiline | Sidusfunktsioone parsib kompilaator. | Makrot laiendab eeltöötleja. |
Süntaks | inline return_type funct_name (parameetrid) {. . . } | #defineeri makro_nimi char_sequence |
Kasutatud märksõnad | järjekorras | #defineeri |
Määratletud | Seda saab määratleda klassis või väljaspool seda. | See määratletakse alati programmi alguses. |
Hindamine | Ta hindab argumenti ainult üks kord. | See hindab argumenti iga kord, kui seda koodis kasutatakse. |
Laiendamine | Kompilaator ei pruugi kõiki funktsioone integreerida ega laiendada. | Makrot laiendatakse alati. |
Automatiseerimine | Klassis määratletud lühikesed funktsioonid tehakse automaatselt rinnasisesteks funktsioonideks. | Makrod tuleks konkreetselt määratleda. |
Juurdepääs | Sidusliikme funktsioon pääseb juurde klassi andmeliikmetele. | Makrod ei saa kunagi olla klassi liikmed ega pääse juurde klassi andmeliikmetele. |
Lõpetamine | Inline-funktsiooni määratlus lõpeb lokkisulgudega inline-funktsiooni lõpus. | Makro määratlus lõpeb uue reaga. |
Silumine | Sidusrežiimi silumine on lihtne, kuna kompileerimise ajal kontrollitakse tõrkeid. | Silumine muutub makrode jaoks keeruliseks, kuna vigade kontrollimist kompileerimise ajal ei toimu. |
Köitmine | Inline-funktsioon seob funktsiooni põhiosas olevad väited väga hästi, kuna funktsiooni põhiosa algab ja lõpeb lokkisulgudega. | Makro seisab siduva probleemiga silmitsi, kui sellel on rohkem kui üks avaldus, kuna sellel pole lõpetamise sümbolit. |
Inline määratlus
Sisefunktsioon näeb välja nagu tavaline funktsioon, kuid sellele eelneb märksõna „järjekorras“. Inline-funktsioonid on lühikese pikkusega funktsioonid, mida laiendatakse selle kutsumise hetkel, selle asemel, et helistada. Saame aru sisemistest funktsioonidest näitega.
# kaasata Ülaltoodud programmis kuulutasin ja määratlesin funktsiooni initsialiseeriva () funktsiooni klassis “näide” sisaldava funktsioonina. Initsialiseerimisfunktsiooni () kood laieneb, kui sellele on kutsutud klassi “näide” objekt. Klassinäites määratletud funktsiooni kuva () ei kuulutata siseseks, kuid koostaja võib seda pidada sisemiseks, kuna C ++-s muudab kompilaator klassis määratletud funktsiooni automaatselt funktsiooni pikkuse järgi rivisiseselt. Makro on „eeltöötlejate direktiiv”. Enne kompileerimist uurib eeltöötleja programmi ja kui ta leiab programmist makro, asendab ta selle makro määratlusega. Seetõttu peetakse makro “asendajaks”. Uurime näiteks makro. # kaasata Ülaltoodud koodis kuulutasin makrofunktsiooni GREATER (), mis võrdleb ja leiab mõlema parameetri suurema arvu. Võite täheldada, et makro lõpetamiseks pole semikoolonit, kuna makro lõpeb ainult uus rida. Kuna makro on lihtsalt asendaja, laiendab see makro koodi, kuhu see kutsutakse. Sisefunktsioonid on palju veenvamad kui makrofunktsioonid. C ++ pakub ka paremat viisi konstandi määratlemiseks, mis kasutab märksõna “const”.
Makro määratlus
Järeldused: