Să studiem diferența între inline și macro cu ajutorul graficului de comparație.
Diagramă de comparație
Bazele comparației | In linie | Macro |
---|---|---|
De bază | Funcțiile inline sunt analizate de compilator. | Macroanele sunt extinse de preprocesor. |
Sintaxă | inline return_type nume_funcțional (parametrii) {. . . } | #define macro_name char_sequence |
Cuvinte cheie utilizate | in linie | #defini |
Definit | Acesta poate fi definit în interiorul sau în afara clasei. | Acesta este întotdeauna definit la începutul programului. |
Evaluare | Evaluează argumentul o singură dată. | Evaluează argumentul de fiecare dată când este folosit în cod. |
Expansiune | Compilatorul nu poate integra și extinde toate funcțiile. | Macroanele sunt întotdeauna extinse. |
Automatizare | Functiile scurte, definite in interiorul clasei, se fac automat pe functii inline. | Macroanele trebuie definite în mod specific. |
accesarea | O funcție de membru inline poate accesa membrii de date din clasă. | Macrogramele nu pot fi niciodată membrii clasei și nu pot accesa membrii de date ai clasei. |
terminare | Definiția funcției inline se termină cu parantezele curbate la sfârșitul funcției inline. | Definiția macro se termină cu noua linie. |
Debugging | Depanarea este ușor pentru o funcție inline deoarece verificarea erorilor se face în timpul compilării. | Depanarea devine dificilă pentru macrocomenzi deoarece verificarea erorilor nu apare în timpul compilării. |
Legare | O funcție inline leagă toate afirmațiile din corpul funcției foarte bine pe măsură ce corpul funcției începe și se termină cu parantezele curbate. | O macrocomandă se confruntă cu problema legării dacă are mai multe instrucțiuni, deoarece nu are simbolul de terminare. |
Definiția Inline
O funcție inline arată ca o funcție obișnuită, dar este precedată de cuvântul cheie " inline ". Funcțiile inline sunt funcții de lungime scurtă care sunt extinse în punctul de invocare, în loc să fie apelate. Să înțelegem funcțiile inline cu un exemplu.
# include folosind namespace std; exemplul de clasă {int a, b; public: inline void initialize (int x, int y) {a = x; b = y} void display () {cout << a << "" <În programul de mai sus, am declarat și definit, inițializarea funcției (), ca o funcție inline în clasa "example". Codul funcției de inițializare () se va extinde acolo unde este invocat de obiectul clasei "example". Afișajul funcției () definit în exemplul de clasă nu este declarat inline, dar poate fi considerat inline de către compilator, deoarece în C ++, funcția definită în interiorul clasei este făcută automat de către compilator în funcție de lungimea funcției.
- Funcția inline reduce reducerea costurilor de apelare și returnare a funcțiilor, ceea ce reduce la rândul lor timpul de execuție a programului. De asemenea, argumentele sunt împinse în stivă și registrele sunt salvate atunci când o funcție este apelată și resetată atunci când funcția returnează, ceea ce necesită timp, acest lucru este evitat de funcțiile inline deoarece nu este nevoie de crearea de variabile locale și parametri formali de fiecare dată .
- Funcțiile inline pot fi un membru al clasei și pot, de asemenea, să acceseze membrul de date al clasei.
- Funcția inline reduce timpul de execuție a programului, dar, uneori, dacă lungimea funcției inline este mai mare decât atunci, mărimea programului va crește, de asemenea, din cauza codului duplicat. Prin urmare, este o practică bună să încadrați funcții foarte mici.
- Argumentul funcției inline este evaluat o singură dată.
Definiția Macro
Macro este o "directivă de preprocesoare". Înainte de compilație, programul este examinat de preprocesor și unde se găsește vreodată macro-ul în program, înlocuiește macro-ul cu definiția sa. Prin urmare, macro-ul este considerat "înlocuirea textului". Să studiem macro cu un exemplu.
#include #define GREATER (a, b) ((a <b)? b: a) int principal (void) {cout << "Mai mare de 10 și 20 este << << GREATER (" 20 ", " 10 ") << "\ n"; retur 0; }
În codul de mai sus, am declarat o funcție macro GREATER (), care compară și găsește numărul mai mare de parametri. Puteți observa că nu există punct și virgulă pentru a termina macrocomanda deoarece macrocomanda este terminată numai de noua linie. Deoarece macro este doar un înlocuitor de text, acesta va extinde codul macro unde este invocat.
- Macrocomenzile sunt întotdeauna definite cu majuscule, pentru a permite programatorilor să identifice toate macrosurile din program în timp ce citesc.
- Macro nu poate fi niciodată o funcție membră a clasei, nici nu poate accesa membrii de date din orice clasă.
- Funcția macro evaluează argumentul de fiecare dată când apare în definiția sa, rezultând un rezultat neașteptat.
- Macroul trebuie să aibă o dimensiune mai mică, deoarece macrocomenzile mai mari vor mări în mod inutil dimensiunea codului.
Diferentele cheie intre inline si macro
- Diferența de bază între inline și macro este că funcțiile inline sunt analizate de compilator, în timp ce macro-urile dintr-un program sunt extinse de preprocesor.
- Cuvântul cheie folosit pentru a defini o funcție inline este " inline ", în timp ce cuvântul cheie utilizat pentru a defini o macrocomandă este " #define ".
- Odată ce funcția inline este decalre în interiorul unei clase, ea poate fi definită fie în interiorul unei clase, fie în afara unei clase. Pe de altă parte, o macrocomandă este întotdeauna definită la începutul programului.
- Argumentul transmis funcțiilor inline este evaluat o singură dată în timp ce compilația, în timp ce argumentul macrocomenzilor este evaluat de fiecare dată când o macrocomandă este utilizată în cod.
- Compilatorul nu poate integra și extinde toate funcțiile definite într-o clasă. Pe de altă parte, macrocomenzile sunt întotdeauna extinse.
- Funcția scurtă definită în interiorul unei clase fără cuvinte cheie inline este realizată automat prin funcții inline. Pe de altă parte, Macro-ul trebuie definit în mod specific.
- O funcție care este în linie poate accesa membrii clasei, în timp ce o macrocomandă nu poate accesa membrii clasei.
- Pentru a termina o funcție inline, este necesară o breșă închisă închisă, în timp ce o macrocomandă este terminată odată cu începerea unei noi linii.
- Debugging-ul devine ușor pentru funcția inlne, deoarece este verificată în timpul compilației pentru orice eroare. Pe de altă parte, o macrocomandă nu este verificată în timp ce compilarea este așa, depanarea unei macrocomenzi devine dificilă.
- Fiind o funcție, o funcție inline leagă membrii săi într-un element de pornire și în niște bretele curbate. Pe de altă parte, macro-ul nu are nici un simbol de terminare, deci legarea devine dificilă atunci când macro conține mai mult de o declarație.
concluzii:
Funcțiile inline sunt mult mai convingătoare decât funcția macro. C ++ oferă, de asemenea, o modalitate mai bună de a defini o constantă, care utilizează un cuvânt cheie "const".