Diferencia entre Inline y Macro en C ++

Autor: Laura McKinney
Fecha De Creación: 2 Abril 2021
Fecha De Actualización: 15 Mayo 2024
Anonim
P.15 Макросы и inline-функции в  C и C++
Video: P.15 Макросы и inline-функции в C и C++

Contenido


Macro es una instrucción que se expande en el momento de su invocación. Las funciones también se pueden definir, como las macros. Del mismo modo, las funciones en línea también se expanden en el punto de su invocación. Una diferencia principal entre la función en línea y macro es que el funciones en línea se expanden durante Compilacion, y el macros se expanden cuando el programa es procesado por el preprocesador.

Estudiemos la diferencia entre en línea y macro con la ayuda del cuadro comparativo.

  1. Cuadro comparativo
  2. Definición
  3. Diferencias clave
  4. Conclusión

Cuadro comparativo

Bases para la comparaciónEn líneaMacro
Básico El compilador analiza las funciones en línea.Las macros son expandidas por el preprocesador.
Sintaxisinline return_type funct_name (parámetros) {. . . }#define macro_name char_sequence
Palabras clave utilizadasen línea
#definir
DefinidoSe puede definir dentro o fuera de la clase.Siempre se define al inicio del programa.
EvaluaciónEvalúa el argumento solo una vez.Evalúa el argumento cada vez que se usa en el código.
Expansión El compilador puede no estar en línea y expandir todas las funciones.Las macros siempre se expanden.
AutomatizaciónLas funciones cortas, definidas dentro de la clase, se convierten automáticamente en funciones en línea.Las macros deben definirse específicamente.
AccediendoUna función de miembro en línea puede acceder a los miembros de datos de la clase.Las macros nunca pueden ser miembros de la clase y no pueden acceder a los miembros de datos de la clase.
TerminaciónLa definición de la función en línea termina con los corchetes al final de la función en línea.La definición de macro termina con la nueva línea.
DepuraciónLa depuración es fácil para una función en línea ya que la verificación de errores se realiza durante la compilación.La depuración se vuelve difícil para las macros ya que la comprobación de errores no ocurre durante la compilación.
UniónUna función en línea une muy bien todas las declaraciones en el cuerpo de la función, ya que el cuerpo de la función comienza y termina con las llaves.Una macro enfrenta el problema de enlace si tiene más de una declaración, ya que no tiene un símbolo de terminación.


Definición de en línea

Una función en línea se parece a una función normal pero está precedida por la palabra clave "en línea". Las funciones en línea son funciones de longitud corta que se expanden en el punto de su invocación, en lugar de llamarse. Comprendamos las funciones en línea con un ejemplo.

#incluir usando el espacio de nombres estándar; ejemplo de clase {int a, b; public: inline void initialize (int x, int y) {a = x; b = y} void display () {cout << a << "" <

En el programa anterior, declaró y definí, la función initialize (), como una función en línea en la clase "ejemplo". El código de la función initialization () se expandirá donde sea invocado por el objeto de la clase "ejemplo". La función display (), definida en el ejemplo de clase no se declara en línea, pero el compilador puede considerarla en línea como en C ++, la función definida dentro de la clase se hace automáticamente en línea por el compilador considerando la longitud de la función.


  • La función en línea reduce la sobrecarga de llamadas y retornos de funciones, lo que a su vez reduce el tiempo de ejecución del programa.Además, los argumentos se envían a la pila y los registros se guardan cuando se llama a una función y se restablecen cuando la función regresa, lo que lleva tiempo, esto es evitado por las funciones en línea ya que no es necesario crear variables locales y parámetros formales cada vez .
  • Las funciones en línea pueden ser miembros de la clase y también pueden acceder al miembro de datos de la clase.
  • La función en línea reduce el tiempo de ejecución del programa pero, a veces, si la longitud de la función en línea es mayor, el tamaño del programa también aumentará debido al código duplicado. Por lo tanto, es una buena práctica incorporar funciones muy pequeñas.
  • El argumento de la función en línea se evalúa solo una vez.

Definición de macro

Macro es una "directiva de preprocesadores". Antes de la compilación, el programa es examinado por el preprocesador y cada vez que encuentra la macro en el programa, reemplaza esa macro por su definición. Por lo tanto, la macro se considera como el "reemplazo". Estudiemos macro con un ejemplo.

#incluir #define GREATER (a, b) ((a <b)? b: a) int main (void) {cout << "Mayor de 10 y 20 es" << GREATER ("20", "10") << " orte"; devuelve 0; }

En el código anterior, declaró una función macro GREATER (), que compara y encuentra el mayor número de ambos parámetros. Puede observar que no hay punto y coma para terminar la macro, ya que la macro se termina solo por la nueva línea. Como una macro es solo un reemplazo, expandirá el código de la macro donde se invoca.

  • Las macros siempre se definen en mayúsculas solo para que los programadores puedan identificar fácilmente todas las macros del programa mientras leen.
  • La macro nunca puede ser una función miembro de una clase, ni puede acceder a los miembros de datos de ninguna clase.
  • La función macro evalúa el argumento cada vez que aparece en su definición, lo que resulta en un resultado inesperado.
  • La macro debe ser de un tamaño más pequeño ya que las macros más grandes aumentarán innecesariamente el tamaño del código.
  1. La diferencia básica entre en línea y macro es que el compilador analiza las funciones en línea, mientras que las macros en un programa son expandidas por el preprocesador.
  2. La palabra clave utilizada para definir una función en línea es "en línea"Mientras que la palabra clave utilizada para definir una macro es"#definir“.
  3. Una vez que la función en línea es decalre dentro de una clase, se puede definir dentro o fuera de una clase. Por otro lado, una macro siempre se define al inicio del programa.
  4. El argumento pasado a las funciones en línea se evalúa solo una vez durante la compilación, mientras que el argumento de macros se evalúa cada vez que se usa una macro en el código.
  5. El compilador puede no estar en línea y expandir todas las funciones definidas dentro de una clase. Por otro lado, las macros siempre se expanden.
  6. Las funciones cortas que se definen dentro de una clase sin palabra clave en línea se convierten automáticamente en funciones en línea. Por otro lado, Macro debe definirse específicamente.
  7. Una función que está en línea puede acceder a los miembros de la clase, mientras que una macro nunca puede acceder a los miembros de la clase.
  8. Para terminar una función en línea, se requiere una llave cerrada mientras que una macro termina con el inicio de una nueva línea.
  9. La depuración se vuelve fácil para la función interna, ya que se verifica durante la compilación por cualquier error. Por otro lado, una macro no se verifica durante la compilación, por lo que la depuración de una macro se vuelve difícil.
  10. Al ser una función, una función en línea une a sus miembros dentro de un inicio y llaves cerradas. Por otro lado, la macro no tiene ningún símbolo de terminación, por lo que el enlace se vuelve difícil cuando la macro contiene más de una declaración.

Conclusiones:

Las funciones en línea son mucho más convincentes que la función macro. C ++ también proporciona una mejor manera de definir una constante, que utiliza una palabra clave "const".