logo

Macros y sus tipos en C

En C, un macro es un fragmento de código en un programa que se reemplaza por el valor de la macro. La macro se define por #definir directiva. Siempre que el compilador encuentra un nombre de macro, reemplaza el nombre con la definición de la macro. Las definiciones de macros no necesitan terminar con punto y coma ( ; ).

Ejemplos de macros en C

A continuación se muestran los programas para ilustrar el uso de macros en C:



Ejemplo 1

El siguiente ejemplo demuestra el uso de macros para definir LIMIT.

C








// C program to illustrate macros> #include> // Macro definition> #define LIMIT 5> // Driver Code> int> main()> {> >// Print the value of macro defined> >printf>(>'The value of LIMIT'> >' is %d'>,> >LIMIT);> >return> 0;> }>

>

>

Producción

The value of LIMIT is 5>

Ejemplo 2

El siguiente ejemplo demuestra el uso de macros para encontrar el área de un rectángulo.

C




// C program to illustrate macros> #include> // Macro definition> #define AREA(l, b) (l * b)> // Driver Code> int> main()> {> >// Given lengths l1 and l2> >int> l1 = 10, l2 = 5, area;> >// Find the area using macros> >area = AREA(l1, l2);> >// Print the area> >printf>(>'Area of rectangle'> >' is: %d'>,> >area);> >return> 0;> }>

>

>

Producción

Area of rectangle is: 50>

Explicación
Del programa anterior, podemos ver que cada vez que el compilador encuentra ÁREA(l,b) en el programa lo reemplaza con la definición de macros, es decir, (l*b) . Los valores pasados ​​a la plantilla de macro. ÁREA(l,b) también será reemplazado por la declaración (l*b) . Por lo tanto, ÁREA(10, 5) será igual a 10*5 .

Tipos de macros en C

Hay dos tipos de macros en lenguaje C:

1. Macros similares a objetos

Una macro similar a un objeto es un identificador simple que será reemplazado por un fragmento de código. Se llama similar a un objeto porque parece un objeto en el código que lo usa. Se utiliza popularmente para reemplazar un nombre simbólico con un número/variable representado como una constante.

Ejemplo

El siguiente ejemplo es la ilustración de una macro simple, es decir, macros similares a objetos.

C




// C program to illustrate macros> #include> // Macro definition> #define DATE 31> // Driver Code> int> main()> {> >// Print the message> >printf>(>'Lockdown will be extended'> >' upto %d-MAY-2020'>,> >DATE);> >return> 0;> }>

>

>

Producción

Lockdown will be extended upto 31-MAY-2020>

2. Macros en cadena

Las macros dentro de macros se denominan macros en cadena. En las macros en cadena, primero se expande la macro principal y luego se expande la macro secundaria.

Ejemplo

El siguiente programa es la ilustración de una macro en cadena.

C




// C program to illustrate macros> #include> > // Macro definition> #define INSTAGRAM FOLLOWERS> #define FOLLOWERS 138> > // Driver Code> int> main()> {> >// Print the message> >printf>(>'Geeks for Geeks have %dK'> >' followers on Instagram'>,> >INSTAGRAM);> > >return> 0;> }>

>

>

Producción

Geeks for Geeks have 138K followers on Instagram>

Explicación:
INSTAGRAM se expande primero para producir SEGUIDORES. Luego, la macro expandida se expande para producir el resultado 138K. A esto se le llama encadenamiento de macros.

3. Macros multilínea

Una macro similar a un objeto podría tener varias líneas. Entonces, para crear una macro de varias líneas debes usar barra invertida-nueva línea.

Ejemplo

A continuación se muestra la ilustración de macros multilínea:

C




// C program to illustrate macros> #include> // Multi-line Macro definition> #define ELE 1,> >2,> >3> // Driver Code> int> main()> {> >// Array arr[] with elements> >// defined in macros> >int> arr[] = { ELE };> >// Print elements> >printf>(>'Elements of Array are: '>);> >for> (>int> i = 0; i <3; i++) {> >printf>(>'%d '>, arr[i]);> >}> >return> 0;> }>

>

>

Producción

Elements of Array are: 1 2 3>

4. Macros similares a funciones

Estas macros son lo mismo que una llamada de función. Reemplaza el código completo en lugar del nombre de una función. Es necesario un par de paréntesis inmediatamente después del nombre de la macro. Si ponemos un espacio entre el nombre de la macro y los paréntesis en la definición de la macro, entonces la macro no funcionará .
Una macro similar a una función sólo se alarga si y sólo si su nombre aparece con un par de paréntesis después. Si no hacemos esto, el puntero de función obtendrá la dirección de la función real y provocará un error de sintaxis.

Ejemplo

El siguiente ejemplo es la ilustración de macros similares a funciones.

C


canela vs mate



// C program to illustrate macros> #include> // Function-like Macro definition> #define min(a, b) (((a) <(b)) ? (a) : (b))> // Driver Code> int> main()> {> >// Given two number a and b> >int> a = 18;> >int> b = 76;> >printf>(>'Minimum value between'> >' %d and %d is %d '>,> >a, b, min(a, b));> >return> 0;> }>

>

>

Producción

Minimum value between 18 and 76 is 18>

Aquí hay un ejemplo que le permitirá comprender mejor las macros:

Problema: Necesitamos encontrar el área de un círculo definiendo ÁREA(r) Macros.

C




#include> #define PI 3.1416> #define AREA(r) (PI*(r)*(r))> int> main() {> >float> r = 7;>// radius of circle> > >printf>(>'Area of Circle with radius %.0f: %.3f'>, r, AREA(r));> >return> 0;> }> // This code is contributed by Susobhan Akhuli>

>

>

Producción

Area of Circle with radius 7: 153.938>

Conclusión

Las macros son pequeños fragmentos de código que se pueden ejecutar con un solo comando. Se pueden utilizar para automatizar tareas, simplificar procesos complejos y mejorar la productividad. Sin embargo, el uso de macros también presenta algunas desventajas. Estas son algunas de las ventajas y desventajas de las macros:

Preguntas frecuentes sobre macros C

P1. ¿Cuáles son las ventajas de las macros?

Respuesta:

    Mayor productividad: las macros pueden ahorrar tiempo y reducir errores al automatizar tareas repetitivas. Personalización: las macros se pueden personalizar para adaptarse a necesidades específicas, lo que permite una mayor flexibilidad en la forma en que se completan las tareas. Coherencia: las macros pueden ayudar a garantizar la coherencia en las tareas siguiendo un conjunto de instrucciones predeterminadas. Eficiencia: las macros pueden realizar tareas más rápidamente que los humanos, lo que mejora la eficiencia general. Facilidad de uso: las macros son fáciles de crear y usar y requieren poco o ningún conocimiento de programación.

P2. ¿Cuáles son las desventajas de las macros?

Respuesta:

    Riesgos de seguridad: las macros pueden representar un riesgo para la seguridad si no están protegidas adecuadamente o si se utilizan para ejecutar código malicioso. Funcionalidad limitada: es posible que las macros no puedan realizar tareas más complejas, lo que limita su utilidad. Problemas de compatibilidad: es posible que las macros no sean compatibles con todas las aplicaciones de software, lo que limita su utilidad. Mantenimiento: las macros pueden requerir mantenimiento y actualizaciones, lo que puede llevar mucho tiempo y ser costoso. Dependencia: La dependencia excesiva de las macros puede resultar en una disminución de las habilidades de resolución de problemas y del pensamiento crítico.

P3. ¿Puede una macro aceptar argumentos?

Respuesta:

Sí, las macros pueden aceptar argumentos. Por ejemplo, MAX es una macro que toma dos argumentos (ayb) y devuelve el máximo de los dos.

P4. ¿Pueden las macros ser recursivas?

Respuesta:

No, las macros no pueden ser recursivas. Si una macro se vuelve recursiva, entonces la definición se refiere a sí misma y dará lugar a un bucle infinito durante el preprocesamiento.