Recomendado, 2024

La Elección Del Editor

Diferencia entre Inline y Macro en C ++

Macro es una instrucción que se expande en el momento de su invocación. También se pueden definir funciones, 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 la función macro es que las funciones en línea se expanden durante la compilación, y las macros se expanden cuando el preprocesador procesa el programa.

Estudiemos la diferencia entre en línea y macro con la ayuda de una tabla de comparación.

Gráfica comparativa

Bases para la comparaciónEn líneaMacro
BASICLas funciones en línea son analizadas por el compilador.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 una sola vez.Evalúa el argumento cada vez que se usa en el código.
ExpansiónEl compilador no puede en línea y expandir todas las funciones.Las macros siempre están expandidas.
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 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 verificación de errores no ocurre durante la compilación.
UniónUna función en línea une muy bien todas las afirmaciones en el cuerpo de la función, ya que el cuerpo de la función comienza y termina con los corchetes.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 Inline

Una función en línea parece 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 ser llamadas. Vamos a entender las funciones en línea con un ejemplo.

 #include usando namespace std; ejemplo de clase {int a, b; public: inline void initialize (int x, int y) {a = x; b = y} pantalla vacía () {cout << a << "" < 

En el programa anterior, declaré y definí, la función de inicialización (), como una función en línea en la clase "ejemplo". El código de la función de inicialización () se expandirá donde sea invocado por el objeto de la clase "ejemplo". La función de visualización (), definida en el ejemplo de clase no se declara en línea, pero el compilador puede considerarla en línea, ya que 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 la función de llamada y retorno, lo que a su vez reduce el tiempo de ejecución del programa. Además, los argumentos se insertan en la pila y los registros se guardan cuando se llama a una función y se restablece cuando la función regresa, lo que lleva tiempo, esto se evita mediante las funciones en línea ya que no hay necesidad de 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 alinear 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, siempre que encuentre la macro en el programa, reemplaza esa macro por su definición. Por lo tanto, la macro se considera como el "reemplazo de texto". Estudiemos macro con un ejemplo.

 #incluir # definir MAYOR (a, b) ((a <b)? b: a) int main (void) {cout << "El mayor de 10 y 20 es" << GREATER ("20", "10") << "\ n"; devuelve 0; } 

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

  • Las macros siempre se definen en mayúsculas para que los programadores puedan identificar fácilmente todas las macros en el programa mientras leen.
  • La macro nunca puede ser una función miembro de una clase, ni puede acceder a los miembros de datos de cualquier clase.
  • La función de 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.

Diferencias clave entre Inline y Macro

  1. La diferencia básica entre en línea y macro es que las funciones en línea son analizadas por el compilador, mientras que las macros en un programa son expandidas por 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 " #define ".
  3. Una vez que la función en línea está decalre dentro de una clase, se puede definir dentro de una clase 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 mientras se compila, mientras que el argumento de las macros se evalúa cada vez que se utiliza una macro en el código.
  5. El compilador no puede en línea y expandir todas las funciones definidas dentro de una clase. Por otro lado, las macros siempre están expandidas.
  6. La función corta que se define dentro de una clase sin palabra clave en línea se realiza automáticamente en las funciones en línea. Por otro lado, la 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 se termina con el inicio de una nueva línea.
  9. La depuración se vuelve fácil para la función en línea, ya que se comprueba durante la compilación para detectar cualquier error. Por otro lado, una macro no se verifica mientras se compila, 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 cierra llaves. Por otro lado, la macro no tiene ningún símbolo de terminación, por lo que la vinculación 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".

Top