Razlika između inline i makronaredbe u C ++

Autor: Laura McKinney
Datum Stvaranja: 2 Travanj 2021
Datum Ažuriranja: 13 Svibanj 2024
Anonim
Razlika između inline i makronaredbe u C ++ - Tehnologija
Razlika između inline i makronaredbe u C ++ - Tehnologija

Sadržaj


Makro je upute koje se proširuju u trenutku njegovog poziva. Funkcije se također mogu definirati, poput makronaredbi. Slično tome, inline funkcije se proširuju i na mjestu njegovog prizivanja. Jedna glavna razlika između inline i makro funkcije je ta inline funkcije proširuju se tijekom kompilacija, i makronaredbe proširuju se kada program obrađuje Preprocessoru.

Ispitajmo razliku između inline i makronaredbe uz pomoć usporednog grafikona.

  1. Usporedni grafikon
  2. definicija
  3. Ključne razlike
  4. Zaključak

Usporedni grafikon

Osnove za usporedbuU redumakro
Osnovni, temeljni Inline funkcije kompajlera raščlanjuju.Makronaredbe proširuje makroprocesor.
Sintaksainline return_type funct_name (parametri) {. , , }#define makro_ime 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.
procjenaArgument procjenjuje samo jednom.Argument procjenjuje svaki put kad se koristi u kodu.
ekspanzija Kompajler možda ne uključuje i proširuje sve funkcije.Makroni su uvijek prošireni.
AutomatizacijaKratke funkcije, definirane unutar klase, automatski se izvršavaju u ugrađenim funkcijama.Makronaredbe treba posebno definirati.
PristupFunkcija unutarnjih članova može pristupiti podacima članovima klase.Makroni nikada ne mogu biti članovi klase i ne mogu pristupiti podacima članovima klase.
završetakDefinicija inline funkcije završava kovrčavim zagradama na kraju inline funkcije.Definicija makronaredbi prestaje s novim retkom.
ispravljanje pogrešakaRješavanje pogrešaka jednostavno je za ugrađenu funkciju jer se provjera pogreške vrši tijekom kompilacije.Otklanjanje pogrešaka postaje teško za makronaredbe jer se provjera pogreške ne događa tijekom kompilacije.
vezivanjeInline funkcija vrlo dobro veže sve iskaze u tijelu funkcije kao i tijelo funkcije, koje započinje i završava sa kovrčavim zagradama.Makronaredba se suočava s problemom vezanja ako ima više izraza jer nema simbol za završetak.


Definicija Inlinea

Ugrađena funkcija izgleda kao uobičajena funkcija, ali joj prethodi ključna riječ "u redu„. Inline funkcije su funkcije kratke duljine koje se proširuju na mjestu njezina poziva, umjesto da se zovu. Shvatimo umetanje funkcija na primjeru.

#include pomoću namespace std; primjer klase {int a, b; javni: inline void inicijalizirati (int x, int y) {a = x; b = y} void display () {cout << a << "" <

U gornjem programu sam deklarirao i definirao funkciju inicijalizirati (), kao inline funkciju u klasi „primjer“. Kôd funkcije inicijalizacije () proširit će se tamo gdje je na njega pozvao objekt klase "primjer". Prikaz funkcije (), definiran u primjeru klase, nije deklarisan inline, ali prevoditelj ga može smatrati inline u C ++, funkciju definiranu unutar klase automatski sastavlja inline od strane prevoditelja uzimajući u obzir duljinu funkcije.


  • Inline funkcija smanjuje režijske funkcije pozivanja i vraćanja funkcije što zauzvrat smanjuje vrijeme izvršenja programa.Također, argumenti se guraju u stog i registri se spremaju kad se funkcija zove i resetira kad se funkcija vrati, za što je potrebno vrijeme, a to su izbjegle inline funkcije jer nema potrebe za stvaranjem lokalnih varijabli i formalnih parametara svaki put ,
  • Inline funkcije mogu biti član klase i mogu pristupiti i članu podataka klase.
  • Inline funkcija smanjuje vrijeme izvršavanja programa, ali, ponekad, ako je duljina inline funkcije veća, tada se i veličina programa povećava zbog dupliciranog koda. Dakle, dobra je praksa ugraditi vrlo male funkcije.
  • Argument funkcije ugrađene procjenjuje se samo jednom.

Definicija makronaredbe

Makro je "direktiva za procesore". Prije sastavljanja, program pregledava predprocesor i tamo gdje ga ikad pronađe makronaredba, on ga zamjenjuje svojom definicijom. Stoga se makro smatra „zamjenom“. Proučimo makro na primjeru.

#include #define GREATER (a, b) ((a <b)? b: a) int main (void) {cout << "Više od 10 i 20 je" << GREATER ("20", "10") << " n"; vratiti 0; }

U gornjem kôdu najavio sam makro funkciju GREATER (), koja uspoređuje i pronalazi veći broj oba parametra. Možete primijetiti da ne postoji točka s zarezom koja bi ukinula makronaredbu jer je makronaredba ukinuta samo novim retkom. Kako je makronaredba samo zamjena, tako će se proširiti i kod makronaredbe na koji se poziva.

  • Makroi su uvijek definirani velikim slovima kako bi programerima olakšali prepoznavanje svih makronaredbi u programu dok čitaju.
  • Makronaredba nikada ne može biti funkcija člana klase niti može pristupiti članovima podataka bilo koje klase.
  • Makro funkcija ocjenjuje argument svaki put kad se pojavi u njegovoj definiciji što rezultira neočekivanim rezultatom.
  • Makro moraju biti manje veličine jer će veći makronapisi nepotrebno povećavati veličinu koda.
  1. Osnovna razlika između inlinea i makronaredbe je u tome što inline funkcije rastavlja pregovarač, dok makronaredbe u programu proširuje predprocesor.
  2. Ključna riječ koja se koristi za definiranje inline funkcije je "u redu"Dok je ključna riječ koja se koristi za definiranje makronaredbe"#definirati“.
  3. Jednom kada je inline funkcija decalre unutar klase, može se definirati bilo unutar klase ili izvan klase. S druge strane, makronaredba je uvijek definirana na početku programa.
  4. Argument proslijeđen inline funkcijama procjenjuje se samo jednom tijekom kompilacije, dok se argument makronaredbi procjenjuje svaki put kada se u kodu koristi makronaredba.
  5. Kompajler ne može umetnuti i proširiti sve funkcije definirane unutar klase. S druge strane, makroi su uvijek prošireni.
  6. Kratke funkcije koje su definirane unutar klase bez inline ključne riječi automatski se izrađuju u rednim funkcijama. S druge strane, makronaredbu treba posebno definirati.
  7. Inline funkcija može pristupiti članovima klase dok makro nikada ne može pristupiti članovima klase.
  8. Za prekid inline funkcije potrebna je zatvorena kovrčava zagrada dok je makronaredba okončana početkom novog retka.
  9. Otklanjanje pogrešaka postaje jednostavno za internu funkciju jer se tijekom kompilacije provjerava radi bilo kakve pogreške. S druge strane, makro se ne provjerava tijekom kompilacije, pa uklanjanje pogrešaka makroa postaje teško.
  10. Budući da je funkcija, inline funkcija vezuje svoje članove u početnim i zatvorenim kovrčavim zagradama. S druge strane, makroni nemaju nikakav simbol raskida, pa vezanje postaje teško kad makro sadrži više od jedne izjave.

Zaključak:

Inline funkcije puno su uvjerljivije od makro funkcije. C ++ također pruža bolji način definiranja konstante koja koristi ključnu riječ "const".