Diferència entre Inline i Macro en C ++

Autora: Laura McKinney
Data De La Creació: 2 Abril 2021
Data D’Actualització: 16 Ser Possible 2024
Anonim
Diferència entre Inline i Macro en C ++ - Tecnologia
Diferència entre Inline i Macro en C ++ - Tecnologia

Content


La macro és una instrucció que s’expandeix en el moment de la seva invocació. També es poden definir funcions, com ara macros. De la mateixa manera, les funcions en línia també s'amplien al punt de la seva invocació. Una diferència principal entre la funció en línia i la macro és que la funcions en línia s’amplien durant recopilació, i la macros s'ampliaran quan el programa el processa preprocessador.

Analitzem la diferència entre línia i macro amb l'ajut del gràfic de comparació.

  1. Gràfic de comparació
  2. Definició
  3. Diferències claus
  4. Conclusió

Gràfic de comparació

Bases per a la comparacióEn liniaMacro
Bàsic El compilador analitza les funcions en línia.El preprocessador s’amplia les macros.
Sintaxinom de retorn en línia_tip funció_ (paràmetres) {. . . }#defineu nom_macro char_sequence
Paraules clau utilitzadesen linia
#definir
DefinitEs pot definir dins o fora de la classe.Sempre es defineix al començament del programa.
AvaluacióValora l’argument una sola vegada.Valora l’argument cada vegada que s’utilitza al codi.
Expansió El compilador pot no inclinar ni ampliar totes les funcions.Les macros sempre s’amplien.
AutomatitzacióLes funcions curtes, definides a la classe, es fan automàticament en funcions en línia.Les macros s'han de definir específicament.
AccésUna funció de membre en línia pot accedir a les dades dels membres de la classe.Les macros mai no poden ser els membres de la classe i no poden accedir a les dades membres de la classe.
TerminacióLa definició de la funció en línia finalitza amb els claudàtors al final de la funció en línia.La definició de la macro finalitza amb la nova línia.
DepuracióEl depuració és fàcil per a una funció en línia ja que la verificació d’errors es fa durant la compilació.El depuració esdevé difícil per a les macros, ja que la verificació d'errors no es produeix durant la compilació.
EnquadernacióUna funció en línia uneix totes les afirmacions del cos de la funció molt bé quan el cos de la funció comença i acaba amb els claudàtors.Una macro s’enfronta al problema d’enllaç si té més d’una declaració, ja que no té cap símbol de terminació.


Definició d’Inline

Una funció en línia sembla una funció regular, però està precedida de la paraula clau "en linia“. Les funcions en línia són funcions de curta durada que s'expandeixen en el moment de la seva invocació, en lloc de trucar-se. Entenem les funcions en línia amb un exemple.

#incloure ús de l’espai de noms std; exemple de classe {int a, b; public: inicialize void inline (int x, int y) {a = x; b = y} void display () {cout << a << "" <

Al programa anterior, vaig declarar i definir, la funció inicialitzar (), com a funció en línia a la classe "exemple". El codi de la funció d’inicialització () s’expandirà allà on l’invoca l’objecte de la classe “exemple”. La funció de visualització (), definida en l’exemple de classe no està declarada en línia però pot ser considerada en línia pel compilador, com en C ++ la funció definida dins de la classe es fa automàticament en línia per part del compilador tenint en compte la longitud de la funció.


  • La funció en línia redueix la despesa general de la funció de trucada i devolució, que al seu torn redueix el temps d’execució del programa.A més, els arguments s’empenyen a la pila i es guarden els registres quan es truca a una funció i es restableix quan es torna la funció, que requereix temps, això s’evita per les funcions en línia ja que no cal crear variables locals i paràmetres formals cada vegada. .
  • Les funcions en línia poden ser membres de la classe i també poden accedir a les dades membre de la classe.
  • La funció en línia redueix el temps d’execució del programa, però, de vegades si la durada de la funció en línia és més gran, la mida del programa també augmentarà a causa del codi duplicat. Per tant, és una bona pràctica incloure funcions molt petites.
  • L’argument de la funció en línia s’avalua una sola vegada.

Definició de Macro

Macro és una "directiva dels preprocessadors". Abans de la compilació, el preprocessador examina el programa i, sempre que troba la macro al programa, substitueix aquesta macro per la seva definició. Per tant, la macro es considera com a "reemplaçament". Estudiem la macro amb un exemple.

#incloure #define GREAT (a, b) ((a <b)? b: a) int main (void) {cout << "El major de 10 i 20 és" << GREU ("20", "10") << " n"; retornar 0; }

Al codi anterior, vaig declarar una funció macro GREAT (), que compara i troba el major nombre d'ambdós paràmetres. Podeu observar que no hi ha cap punt i coma per acabar la macro, ja que la macro es tanca només per la nova línia. Com que una macro és només un reemplaçament, expandirà el codi de macro allà on s'invoca.

  • Les macros sempre es defineixen en majúscules només per facilitar que els programadors identifiquin totes les macros del programa mentre llegeixen.
  • La macro mai no pot ser la funció de membre d'una classe ni pot accedir a les dades de membres de cap classe.
  • La funció de macro avalua l'argument cada vegada que apareix en la seva definició, la qual cosa dóna com a resultat inesperat.
  • Les macros han de tenir una mida menor, ja que les macros majors augmentaran innecessàriament la mida del codi.
  1. La diferència bàsica entre la línia en línia i la macro és que el compilador analitza les funcions en línia mentre que, les macros d'un programa s'expandeixen per preprocessador.
  2. La paraula clau utilitzada per definir una funció en línia és "en linia”Mentre que, la paraula clau utilitzada per definir una macro és“#definir“.
  3. Una vegada que la funció en línia es decalci dins d'una classe, es pot definir dins d'una classe o fora d'una classe. D'altra banda, sempre es defineix una macro a l'inici del programa.
  4. L'argument passat a les funcions en línia s'avalua una sola vegada mentre es recopila mentre que, l'argument de macros s'avalua cada vegada que s'utilitza una macro al codi.
  5. El compilador pot no inclinar ni ampliar totes les funcions definides dins d’una classe. D'altra banda, les macros sempre s'amplien.
  6. Les funcions curtes que es defineixen dins d'una classe sense paraula clau en línia es fan automàticament en funcions en línia. D'altra banda, s'ha de definir específicament la macro.
  7. Una funció inline pot accedir als membres de la classe mentre que, una macro mai pot accedir als membres de la classe.
  8. Per finalitzar una funció en línia és necessària una claudàcula tancada, mentre que, una macro es tanca amb l'inici d'una nova línia.
  9. El procés de depuració és fàcil per a la funció inlne, ja que es comprova qualsevol error en la compilació. D'altra banda, no es comprova una macro mentre es recopila, de manera que es fa difícil depurar una macro.
  10. Al ser una funció, una funció en línia uneix els seus membres dins d'unes clausades inicials i tancades. D'altra banda, les macro no tenen cap símbol de terminació, per tant, l'enllaç es fa difícil quan la macro conté més d'una declaració.

Conclusions:

Les funcions en línia són molt més convincents que les funcions de macro. C ++ també proporciona una millor manera de definir una constant, que utilitza una paraula clau "const".