Diferența dintre Inline și Macro în C ++

Autor: Laura McKinney
Data Creației: 2 Aprilie 2021
Data Actualizării: 16 Mai 2024
Anonim
Diferența dintre Inline și Macro în C ++ - Tehnologie
Diferența dintre Inline și Macro în C ++ - Tehnologie

Conţinut


Macro este o instrucțiune care se extinde în momentul invocării sale. Funcțiile pot fi, de asemenea, definite, cum ar fi macro-urile. În mod similar, funcțiile inline se extind și la punctul invocării sale. O diferență primară între funcția inline și macro este aceea că funcții inline sunt extinse în timpul compilare, si macro-uri sunt extinse atunci când programul este procesat de către preprocesor.

Să studiem diferența dintre linie interioară și macro, cu ajutorul graficului de comparație.

  1. Diagramă de comparație
  2. Definiție
  3. Diferențele cheie
  4. Concluzie

Diagramă de comparație

Baza pentru comparațieIn linieMacro
De bază Funcțiile în linie sunt analizate de compilator.Macro-urile sunt extinse de preprocesor.
Sintaxăinline return_type nume_funcție (parametri) {. . . }#define macro_name char_sequence
Cuvinte cheie utilizatein linie
#defini
DefinitPoate fi definit în cadrul sau în afara clasei.Este întotdeauna definit la începutul programului.
EvaluareEvaluează argumentul o singură dată.Evaluează argumentul de fiecare dată când este utilizat în cod.
Expansiune Este posibil ca compilatorul să nu încline și să extindă toate funcțiile.Macro-urile sunt mereu extinse.
AutomatizareFuncțiile scurte, definite în interiorul clasei sunt efectuate automat pe funcții inline.Macro-urile ar trebui definite în mod specific.
accesareaO funcție de membru inline poate accesa datele membrilor clasei.Macro-urile nu pot fi niciodată membrii clasei și nu pot accesa datele membrilor clasei.
terminareDefiniția funcției inline se încheie cu parantezele cretate la sfârșitul funcției inline.Definiția macro se termină cu noua linie.
debuggingDebugging-ul este ușor pentru o funcție inline, deoarece verificarea erorilor se face în timpul compilării.Debugging-ul devine dificil pentru macro-uri, deoarece verificarea erorilor nu are loc în timpul compilării.
LegareO funcție inline leagă foarte bine toate enunțurile din corpul funcției, iar corpul funcției începe și se termină cu parantezele cret.O macrocomunicare se confruntă cu problema de legare dacă are mai multe afirmații, deoarece nu are simbol de încheiere.


Definiția Inline

O funcție inline arată ca o funcție obișnuită, dar este precedată de cuvântul cheie „in linie„. Funcțiile în linie sunt funcții de lungime scurtă care se extind la punctul de invocare, în loc să fie apelate. Să înțelegem funcțiile inline cu un exemplu.

#include folosirea spațiului de nume std; exemplu 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, funcția inițializează (), ca o funcție inline în clasa „exemplu”. Codul funcției de inițializare () se va extinde acolo unde este invocat de obiectul clasei „exemplu”. Afișarea funcției (), definită în exemplul clasei nu este declarată inline, dar poate fi considerată inline de către compilator, ca în C ++ funcția definită în interiorul clasei este făcută automat în linie de către compilator, luând în considerare lungimea funcției.


  • Funcția inline reduce cheltuielile generale de apelare și întoarcere, ceea ce la rândul său reduce timpul de execuție al programului.De asemenea, argumentele sunt împinse pe stivă și registrele sunt salvate atunci când o funcție este apelată și resetată la revenirea funcției, care necesită timp, acest lucru este evitat de funcțiile inline, deoarece nu este necesar să se creeze variabile locale și parametri formali de fiecare dată. .
  • Funcțiile inline pot fi membre ale clasei și pot accesa, de asemenea, datele de membru ale clasei.
  • Funcția Inline reduce timpul de execuție al programului, dar, uneori, dacă lungimea funcției inline este mai mare atunci, dimensiunea programului va crește și din cauza codului duplicat. Prin urmare, este o practică bună să aliniem funcții foarte mici.
  • Argumentul funcției inline este evaluat o singură dată.

Definiția Macro

Macro este o „directivă a preprocesoarelor”. Înainte de compilare, programul este examinat de preprocesor și unde găsește macrocomanda în program, înlocuiește macro-ul prin definiția sa. Prin urmare, macrocomanda este considerată „înlocuitor”. Să studiem macro-ul cu un exemplu.

#include #define GREAT (a, b) ((a <b)? b: a) int main (void) {cout << "Greater of 10 and 20 is" << GREAT ("20", "10") << " n"; returnare 0; }

În codul de mai sus, am declarat o funcție macro GREAT (), care compară și găsește numărul mai mare al ambilor parametri. Puteți observa că nu există niciun punct și virgulă pentru a încheia macro-ul, deoarece macro-ul este încheiat doar de noua linie. Deoarece o macrocomandă este doar o înlocuire, acesta va extinde codul macro-ului acolo unde este invocat.

  • Macro-urile sunt definite întotdeauna cu majuscule doar pentru a facilita identificarea tuturor macro-urilor din program în timp ce citesc.
  • Macro nu poate fi niciodată funcția de membru a unei clase și nici nu poate accesa datele membrilor unei clase.
  • Funcția macro evaluează argumentul de fiecare dată când apare în definiția sa, rezultând un rezultat neașteptat.
  • Macro trebuie să aibă o dimensiune mai mică, deoarece macro-urile mai mari vor crește inutil dimensiunea codului.
  1. Diferența de bază între linie și macro este că funcțiile inline sunt analizate de compilator, în timp ce macros-urile dintr-un program sunt extinse de preprocesor.
  2. Cuvântul cheie utilizat pentru a defini o funcție inline este „in linie”Întrucât, cuvântul cheie utilizat pentru definirea unei macro este„#defini“.
  3. Odată ce funcția inline este decalizată în interiorul unei clase, aceasta 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.
  4. Argumentul transmis funcțiilor inline este evaluat o singură dată în timp ce compilarea, în timp ce argumentul macros este evaluat de fiecare dată când se folosește o macro în cod.
  5. Este posibil ca compilatorul să nu încline și să extindă toate funcțiile definite în cadrul unei clase. Pe de altă parte, macro-urile sunt mereu extinse.
  6. Funcțiile scurte care sunt definite în interiorul unei clase fără un cuvânt cheie în linie se fac automat funcții inline. Pe de altă parte, Macro ar trebui definit în mod specific.
  7. O funcție inline poate accesa membrii clasei, în timp ce, o macrocomandă nu poate accesa niciodată membrii clasei.
  8. Pentru a încheia o funcție în linie, este necesară o bretelă cretă închisă, în timp ce, o macrocomandă este încheiată cu începutul unei noi linii.
  9. Debugging-ul devine ușor pentru funcția inlne, deoarece este verificat în timpul compilării pentru orice eroare. Pe de altă parte, o macrocomandă nu este verificată în timp ce compilarea, deci, debugarea unei macro devine dificilă.
  10. Fiind o funcție, o funcție inline își leagă membrii în cadrul unei bretele cu bucle de pornire și închise. Pe de altă parte, macro nu au niciun simbol de încheiere, astfel încât legarea devine dificilă atunci când macro conține mai multe afirmații.

concluzii:

Funcțiile în linie sunt mult mai convingătoare decât funcția macro. C ++ oferă, de asemenea, o modalitate mai bună de a defini o constantă, care folosește un cuvânt cheie „const”.