Preporučeno, 2024

Izbor Urednika

Razlika između inline i makroa u C ++

Makro je instrukcija koja se proširuje u trenutku njezina pozivanja. Funkcije se također mogu definirati, poput makronaredbi. Isto tako, funkcije inline se također proširuju u trenutku njegovog pozivanja. Jedna primarna razlika između inline i makro funkcije je u tome što su inline funkcije proširene tijekom kompilacije, a makroi se proširuju kada program obrađuje pretprocesor .

Proučimo razliku između inline i makroa uz pomoć usporedne tablice.

Tablica usporedbe

Osnova za usporedbuU redumakro
Osnovni, temeljniKompajler analizira ugrađene funkcije.Makroi se proširuju pomoću pretprocesora.
Sintaksainline return_type funct_name (parametri) {., , }#define macro_name char_sequence
Korištene ključne riječiu redu
#definirati
definiranMože se definirati unutar ili izvan klase.Uvijek se definira na početku programa.
procjenaOn argumente procjenjuje samo jednom.On vrednuje argument svaki put kada se koristi u kodu.
ekspanzijaKompajler možda neće ugraditi i proširiti sve funkcije.Makronaredbe se uvijek proširuju.
AutomatizacijaKratke funkcije, definirane unutar klase, automatski se unose u inline funkcije.Makronaredbe trebaju biti posebno definirane.
PristupFunkcija inline člana može pristupiti članovima podataka klase.Makronaredbe nikada ne mogu biti članovi klase i ne mogu pristupiti članovima podataka klase.
završetakDefinicija inline funkcije završava s vitičastim zagradama na kraju inline funkcije.Definicija makronaredbe završava se novom linijom.
otklanjanje grešakaIspravljanje 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.
vezivanjeFunkcija 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

  1. 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.
  2. Ključna riječ koja se koristi za definiranje inline funkcije je " inline ", dok je ključna riječ koja se koristi za definiranje makronaredbe " #define ".
  3. 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.
  4. Argument proslijeđen inline funkcijama evaluta se samo jednom prilikom kompilacije, dok se argument makronaredbe ocjenjuje svaki put kada se makro koristi u kodu.
  5. Kompajler ne može ugraditi i proširiti sve funkcije definirane unutar klase. S druge strane, makronaredbe se uvijek proširuju.
  6. 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.
  7. Funkcija koja je inline može pristupiti članovima klase, dok makro nikada ne može pristupiti članovima klase.
  8. Da biste prekinuli inline funkciju, potrebna je zatvorena zakrivljena zagrada, dok je makronaredba prekinuta s početkom novog retka.
  9. 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.
  10. 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".

Top