Una macro es una pieza de código en un programa que se reemplaza por el valor de la macro. La macro se define mediante la directiva #define . Cada vez que el compilador encuentra un nombre de macro, reemplaza el nombre con la definición de la macro. Las definiciones de macro no necesitan terminar con un punto y coma ( ; ).
A continuación se muestran los programas para ilustrar el uso de macros en C/C++:
Programa 1:
C
// C program to illustrate macros #include <stdio.h> // 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; }
C++
// C++ program to illustrate macros #include <iostream> using namespace std; // Macro definition #define LIMIT 5 // Driver Code int main() { // Print the value of macro defined cout << "The value of LIMIT" << " is " << LIMIT; return 0; }
The value of LIMIT is 5
Programa 2:
C
// C program to illustrate macros #include <stdio.h> // 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; }
C++
// C++ program to illustrate macros #include <iostream> using namespace std; // 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 cout << "Area of rectangle" << " is: "<< area; return 0; }
Area of rectangle is: 50
Explicación:
Del programa anterior, podemos ver que cada vez que el compilador encuentra AREA(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 AREA(l, b) también serán reemplazados por la declaración (l*b) . Por lo tanto, AREA(10, 5) será igual a 10*5 .
tipos de macros
- 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 usa popularmente para reemplazar un nombre simbólico con numérico/variable representado como constante.
A continuación se muestra la ilustración de una macro simple:
C
// C program to illustrate macros #include <stdio.h> // Macro definition #define DATE 31 // Driver Code int main() { // Print the message printf("Lockdown will be extended" " upto %d-MAY-2020", DATE); return 0; }
C++
// C++ program to illustrate macros #include <iostream> using namespace std; // Macro definition #define DATE 31 // Driver Code int main() { // Print the message cout << "Lockdown will be extended" << " upto " << DATE << "-MAY-2020"; return 0; }
Lockdown will be extended upto 31-MAY-2020
2. Macros en string: las macros dentro de macros se denominan macros en string. En las macros en string, primero se expande la macro principal y luego se expande la macro secundaria.
A continuación se muestra la ilustración de una macro de string:
C
// C program to illustrate macros #include <stdio.h> // 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; }
C++
// C++ program to illustrate macros #include <iostream> using namespace std; // Macro definition #define INSTAGRAM FOLLOWERS #define FOLLOWERS 138 // Driver Code int main() { // Print the message cout << "Geeks for Geeks have " << INSTAGRAM << "K followers on Instagram!"; return 0; }
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 138 . Esto se llama el enstringmiento de macros.
3. Macros multilínea: una macro similar a un objeto podría tener una multilínea. Entonces, para crear una macro de varias líneas, debe usar backslash-newline.
A continuación se muestra la ilustración de las macros multilínea:
C
// C program to illustrate macros #include <stdio.h> // 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:\n"); for (int i = 0; i < 3; i++) { printf("%d ", arr[i]); } return 0; }
C++
// C++ program to illustrate macros #include <iostream> using namespace std; // 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:\n"); for (int i = 0; i < 3; i++) { cout << arr[i] << ' '; } return 0; }
Elements of Array are: 1 2 3
4. Macro similar a una función: estas macros son lo mismo que una llamada de función. Reemplaza el código completo en lugar de un nombre de 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, la macro no funcionará .
Una macro similar a una función solo se alarga 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 dará lugar a un error de sintaxis .
A continuación se muestra la ilustración de macros similares a funciones:
C
// C program to illustrate macros #include <stdio.h> // 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\n", a, b, min(a, b)); return 0; }
C++
// C++ program to illustrate macros #include <iostream> using namespace std; // 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; cout << "Minimum value between" << a << " and " << b << " is: " << min(a, b); return 0; }
Minimum value between 18 and 76 is 18
Aquí hay un ejemplo que le dará una mayor comprensión de las Macros:
Problema: Necesitamos encontrar el área de un círculo definiendo AREA(r) Macros.
C++
#include <iostream> using namespace std; #define PI 3.1416 #define AREA(r) (PI*(r)*(r)) int main() { float r = 7; // radius of circle cout<<"Area of Circle with radius " << r <<": "<< AREA(r); return 0; } // This code is contributed by balbiriitbombay3602
Area of Circle with radius 7: 153.938
Publicación traducida automáticamente
Artículo escrito por divya_dashrath_barvekar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA