En C, a macro és un fragment de codi d'un programa que se substitueix pel valor de la macro. La macro es defineix per #definir directiva. Sempre que el compilador troba un nom de macro, substitueix el nom per la definició de la macro. Les definicions de macro no cal que finalitzin amb un punt i coma( ; ).
Exemples de macros en C
A continuació es mostren els programes per il·lustrar l'ús de macros en C:
Exemple 1
L'exemple següent mostra l'ús de macros per 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;> }> |
>
>Sortida
The value of LIMIT is 5>
Exemple 2
L'exemple següent mostra l'ús de macros per trobar l'àrea d'un rectangle.
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;> }> |
>
>Sortida
Area of rectangle is: 50>
Explicació
Des del programa anterior, ho podem veure sempre que el compilador ho trobi ÀREA(l, b) al programa el substitueix per la definició de macros, és a dir, (l*b) . Els valors passats a la plantilla de macro ÀREA(l, b) també se substituirà per la declaració (l*b) . Per tant, ÀREA(10, 5) serà igual a 10*5 .
Tipus de macros en C
Hi ha dos tipus de macros en llenguatge C:
1. Macros semblants a objectes
Una macro semblant a un objecte és un identificador simple que serà substituït per un fragment de codi. S'anomena object-like perquè sembla un objecte del codi que l'utilitza. S'utilitza popularment per substituir un nom simbòlic per un numèric/variable representat com una constant.
Exemple
L'exemple següent és la il·lustració d'una macro simple, és a dir, macros semblants a un objecte.
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;> }> |
>
>Sortida
Lockdown will be extended upto 31-MAY-2020>
2. Macros en cadena
Les macros dins de macros s'anomenen macros en cadena. En les macros en cadena, primer s'amplia la macro pare i després s'amplia la macro secundària.
Exemple
El programa següent és la il·lustració d'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;> }> |
>
>Sortida
Geeks for Geeks have 138K followers on Instagram>
Explicació:
INSTAGRAM s'amplia primer per produir SEGUIDORS. A continuació, la macro expandida s'amplia per produir el resultat com a 138K. Això s'anomena encadenament de macros.
3. Macros multilínia
Una macro semblant a un objecte podria tenir una línia múltiple. Per tant, per crear una macro multilínia, heu d'utilitzar barra invertida-newline.
Exemple
A continuació es mostra la il·lustració de macros multilínia:
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;> }> |
>
>Sortida
Elements of Array are: 1 2 3>
4. Macros semblants a les funcions
Aquestes macros són les mateixes que una trucada de funció. Substitueix tot el codi en lloc d'un nom de funció. És necessari un parell de parèntesis immediatament després del nom de la macro. Si posem un espai entre el nom de la macro i els parèntesis a la definició de la macro, aleshores la macro no funcionarà .
Una macro com a funció només s'allarga si i només si el seu nom apareix amb un parèntesi després. Si no fem això, el punter de funció obtindrà l'adreça de la funció real i donarà lloc a un error de sintaxi.
Exemple
L'exemple següent és la il·lustració de macros semblants a funcions
C
alinear la imatge amb css
// 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;> }> |
>
>Sortida
Minimum value between 18 and 76 is 18>
Aquí teniu un exemple que us permetrà entendre millor les macros:
Problema: Hem de trobar l'àrea d'un cercle mitjançant la definició À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> |
>
>Sortida
Area of Circle with radius 7: 153.938>
Conclusió
Les macros són petites peces de codi que es poden executar amb una sola ordre. Es poden utilitzar per automatitzar tasques, simplificar processos complexos i millorar la productivitat. Tanmateix, també hi ha alguns desavantatges a l'ús de macros. Aquests són alguns dels avantatges i desavantatges de les macros:
Preguntes freqüents sobre macros C
Q1. Quins són els avantatges de les macros?
Resposta:
Augment de la productivitat: les macros poden estalviar temps i reduir els errors automatitzant les tasques repetitives. Personalització: les macros es poden personalitzar per adaptar-se a necessitats específiques, la qual cosa permet una major flexibilitat en com es realitzen les tasques. Coherència: les macros poden ajudar a garantir la coherència de les tasques seguint un conjunt d'instruccions predeterminades. Eficiència: les macros poden realitzar tasques més ràpidament que els humans, millorant l'eficiència general. Facilitat d'ús: les macros són fàcils de crear i utilitzar, i requereixen poc o cap coneixement de programació
P2. Quins són els inconvenients de les macros?
Resposta:
Riscos de seguretat: les macros poden suposar un risc de seguretat si no estan degudament protegits o si s'utilitzen per executar codi maliciós. Funcionalitat limitada: és possible que les macros no puguin realitzar tasques més complexes, la qual cosa limita la seva utilitat. Problemes de compatibilitat: és possible que les macros no siguin compatibles amb totes les aplicacions de programari, la qual cosa limita la seva utilitat. Manteniment: les macros poden requerir manteniment i actualitzacions, la qual cosa pot suposar molt de temps i costos. Dependència: la dependència excessiva de les macros pot provocar una disminució de les habilitats de resolució de problemes i del pensament crític.
P3. Pot una macro acceptar arguments?
Resposta:
Sí, les macros poden tenir arguments. Per exemple, MAX és una macro que pren dos arguments (a i b) i retorna el màxim dels dos.
P4. Les macros poden ser recursives?
Resposta:
No, les macros no poden ser recursives. Si una macro es torna recursiva, la definició es refereix a si mateixa i donarà lloc a un bucle infinit durant el preprocessament.