Las macros son preprocesado lo que significa que todas las macros se procesarán antes de que se compile el programa. Sin embargo, las funciones son no preprocesado pero compilado.

Vea el siguiente ejemplo de macro:

#include<stdio.h>

#define NUMBER 10

int main()

{

     printf("%d", NUMBER);

     return 0;

}

Producción:

10

Vea el siguiente ejemplo de función:

#include<stdio.h>

int number()

{

    return 10;

}

int main()

{

    printf("%d", number());

    return 0;

}

Producción:

10

Ahora compílelos usando el comando:

gcc –E file_name.c

Esto le dará el código ejecutable como se muestra en la figura:

b12

Esto muestra que las macros están preprocesadas, mientras que las funciones no.

En las macros, no se realiza ninguna verificación de tipo (operando incompatible, etc.) y, por lo tanto, el uso de micros puede provocar errores / efectos secundarios en algunos casos. Sin embargo, este no es el caso de las funciones. Además, las macros no comprueban si hay errores de compilación (si los hay). Considere los siguientes dos códigos:

Macros:

#include<stdio.h>

#define CUBE(b) b*b*b

int main()

{

     printf("%d", CUBE(1+2));

     return 0;

}

Salida: salida inesperada

7

Funciones:

#include<stdio.h>

int cube(int a)

{

     return a*a*a;

}

int main()

{

    printf("%d", cube(1+2));

    return 0;

}

Salida: como se esperaba

27
  • Las macros suelen ser de una sola línea. Sin embargo, pueden constar de más de una línea. Haga clic aquí para ver el uso. No existen tales limitaciones en las funciones.
  • La velocidad a la que difieren las macros y las funciones. Las macros suelen ser más rápidas que las funciones, ya que no implican una sobrecarga real de llamadas a funciones.

Conclusión:
Las macros ya no se recomiendan porque causan los siguientes problemas. Hay una forma mejor en los compiladores modernos que son las funciones en línea y la variable constante. A continuación se muestran las desventajas de las macros:

a) No hay verificación de tipo

b) Difíciles de depurar ya que causan un reemplazo simple.

c) La macro no tiene espacio de nombres, por lo que una macro en una sección de código puede afectar a otra sección.

d) Las macros pueden causar efectos secundarios como se muestra en el ejemplo de CUBE () anterior.

Macro Función
La macro está preprocesada La función está compilada
No se realiza ninguna verificación de tipo en Macro La verificación de tipo se realiza en función
El uso de Macro aumenta la longitud del código El uso de la función mantiene inalterada la longitud del código
El uso de macro puede provocar efectos secundarios en etapas posteriores Las funciones no producen ningún efecto secundario en ningún caso
La velocidad de ejecución con macro es más rápida La velocidad de ejecución con la función es más lenta
Antes de la compilación, el nombre de la macro se reemplaza por el valor de la macro Durante la llamada de función, se realiza la transferencia de control.
Las macros son útiles cuando el código pequeño se repite muchas veces Las funciones son útiles cuando se va a escribir código grande
La macro no comprueba ningún error en tiempo de compilación La función comprueba los errores en tiempo de compilación

Consulte a continuación para obtener más detalles sobre las macros:
Datos interesantes sobre macros y preprocesadores

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema discutido anteriormente.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *