Proučimo razliku između inline i makroa uz pomoć usporedne tablice.
Tablica usporedbe
Osnova za usporedbu | U redu | makro |
---|---|---|
Osnovni, temeljni | Kompajler analizira ugrađene funkcije. | Makroi se proširuju pomoću pretprocesora. |
Sintaksa | inline return_type funct_name (parametri) {., , } | #define macro_name char_sequence |
Korištene ključne riječi | u redu | #definirati |
definiran | Može se definirati unutar ili izvan klase. | Uvijek se definira na početku programa. |
procjena | On argumente procjenjuje samo jednom. | On vrednuje argument svaki put kada se koristi u kodu. |
ekspanzija | Kompajler možda neće ugraditi i proširiti sve funkcije. | Makronaredbe se uvijek proširuju. |
Automatizacija | Kratke funkcije, definirane unutar klase, automatski se unose u inline funkcije. | Makronaredbe trebaju biti posebno definirane. |
Pristup | Funkcija inline člana može pristupiti članovima podataka klase. | Makronaredbe nikada ne mogu biti članovi klase i ne mogu pristupiti članovima podataka klase. |
završetak | Definicija inline funkcije završava s vitičastim zagradama na kraju inline funkcije. | Definicija makronaredbe završava se novom linijom. |
otklanjanje grešaka | Ispravljanje pogrešaka lako je za inline funkciju jer se provjera pogrešaka obavlja tijekom kompilacije. | Otklanjanje pogrešaka postaje teško za makronaredbe jer se provjera pogrešaka ne događa tijekom kompilacije. |
vezivanje | Funkcija inline povezuje sve izjave u tijelu funkcije vrlo dobro kao i tijelo funkcije i završava se s vitičastim zagradama. | Makro je suočen s problemom vezivanja ako ima više od jednog izraza, budući da nema terminacijskog simbola. |
Definicija inline
Inline funkcija izgleda kao redovita funkcija, ali joj prethodi ključna riječ " inline ". Inline funkcije su funkcije kratke duljine koje se proširuju u trenutku njezina pozivanja, umjesto da se pozivaju. Razmotrimo inline funkcije s primjerom.
#include pomoću imena prostora std; primjer klase {int a, b; public: inline void inicijalizira (int x, int y) {a = x; b = y} nevažeći prikaz () {cout << a << "<<U gore navedenom programu deklarirala sam i definirala inicijalizaciju funkcije (), kao inline funkciju u klasi "primjer". Kôd funkcije inicijalizacije () proširit će se tamo gdje ga poziva objekt klase "primjer". Funkcija display (), definirana u primjeru klase, nije deklarirana inline, ali kompajler ga može smatrati umetnutom, u C ++ funkcija definirana unutar klase automatski je napravljena od strane prevoditelja s obzirom na duljinu funkcije.
- Funkcija inline smanjuje opterećenje funkcije poziva i vraćanja što smanjuje vrijeme izvršenja programa. Također, argumenti se guraju na stog i registri se pohranjuju kada se pozove funkcija i resetira kada se funkcija vrati, što zahtijeva vrijeme, to se izbjegava inline funkcijama jer nema potrebe za stvaranjem lokalnih varijabli i formalnih parametara svaki put,
- Inline funkcije mogu biti članovi klase i također mogu pristupiti članu podataka klase.
- Inline funkcija smanjuje vrijeme izvođenja programa, ali, ponekad, ako je duljina inline funkcije veća onda, veličina programa će se također povećati zbog dupliciranog koda. Stoga je dobra praksa ugraditi vrlo male funkcije.
- Argument funkcije inline se procjenjuje samo jednom.
Definicija makroa
Makro je "direktiva za procesore". Prije kompilacije, program se pregledava od strane pretprocesora i gdje god pronađe makro u programu, zamjenjuje taj makro svojom definicijom. Stoga se makro smatra "zamjenom teksta". Proučimo makro s primjerom.
#include #define VELIKI (a, b) ((a <b)? b: a) int main (void) {cout << "Veći od 10 i 20 je" << GREATER ("20", "10") << "\ t return 0; }
U gornjem kodu sam deklarirao makro funkciju GREATER (), koja uspoređuje i pronalazi veći broj oba parametra. Možete primijetiti da nema točke sa zarezom za završetak makronaredbe jer se makronaredba završava samo novom linijom. Budući da je makronaredba samo zamjena teksta, proširit će šifru makronaredbe na koju se poziva.
- Makronaredbe se uvijek definiraju velikim slovima kako bi programeri mogli lakše prepoznati sve makronaredbe u programu tijekom čitanja.
- Makro nikada ne može biti funkcija člana klase, niti može pristupiti članovima podataka bilo koje klase.
- Makro funkcija ocjenjuje argument svaki put kada se pojavi u njegovoj definiciji što rezultira neočekivanim rezultatom.
- Makro mora biti manje veličine jer će veći makroi nepotrebno povećati veličinu koda.
Ključne razlike između inline i makroa
- Osnovna razlika između inline-a i makroa je u tome što se kompajler analizira pomoću inline funkcija, dok se makroi u programu proširuju pomoću pretprocesora.
- Ključna riječ koja se koristi za definiranje inline funkcije je " inline ", dok je ključna riječ koja se koristi za definiranje makronaredbe " #define ".
- Jednom kada je inline funkcija dekalirana unutar klase, može se definirati unutar klase ili izvan klase. S druge strane, makro se uvijek definira na početku programa.
- Argument proslijeđen inline funkcijama evaluta se samo jednom prilikom kompilacije, dok se argument makronaredbe ocjenjuje svaki put kada se makro koristi u kodu.
- Kompajler ne može ugraditi i proširiti sve funkcije definirane unutar klase. S druge strane, makronaredbe se uvijek proširuju.
- Kratka funkcija koja je definirana unutar klase bez inline ključne riječi automatski se stvaraju inline funkcije. S druge strane, makro bi trebao biti posebno definiran.
- Funkcija koja je inline može pristupiti članovima klase, dok makro nikada ne može pristupiti članovima klase.
- Da biste prekinuli inline funkciju, potrebna je zatvorena zakrivljena zagrada, dok je makronaredba prekinuta s početkom novog retka.
- Otklanjanje pogrešaka postaje lako za inlne funkcije jer se provjerava tijekom kompilacije za bilo koju pogrešku. S druge strane, makronaredba se ne provjerava tijekom kompilacije, tako da debagiranje makronaredbe postaje teško.
- Budući da je funkcija, inline funkcija veže svoje članove unutar starta i zatvaraju kovrčave zagrade. S druge strane, makro nema ikakav prekidni simbol, pa vezanje postaje teško kada makro sadrži više od jedne naredbe.
Zaključak:
Inline funkcije su daleko uvjerljivije od makro funkcije. C ++ također pruža bolji način za definiranje konstante, koja koristi ključnu riječ "const".