In C, a macro è un pezzo di codice in un programma che viene sostituito dal valore della macro. La macro è definita da #definire direttiva. Ogni volta che il compilatore incontra un nome di macro, sostituisce il nome con la definizione della macro. Non è necessario che le definizioni delle macro terminino con un punto e virgola( ; ).
Esempi di macro in C
Di seguito sono riportati i programmi per illustrare l'uso delle macro in C:
Esempio 1
L'esempio seguente dimostra l'uso delle macro per definire 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;> }> |
>
>Produzione
The value of LIMIT is 5>
Esempio 2
L'esempio seguente dimostra l'uso delle macro per trovare l'area di un rettangolo.
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;> }> |
>
>Produzione
Area of rectangle is: 50>
Spiegazione
Dal programma sopra, possiamo vedere che ogni volta che il compilatore trova AREA(l, b) nel programma lo sostituisce con la definizione della macro, ovvero (libbre) . I valori passati al modello macro AREA(l, b) sarà anch'esso sostituito dalla dichiarazione (libbre) . Perciò, AREA(10, 5) sarà uguale a 10*5 .
Tipi di macro in C
Esistono due tipi di macro nel linguaggio C:
1. Macro simili a oggetti
Una macro simile a un oggetto è un semplice identificatore che verrà sostituito da un frammento di codice. Si chiama simile a un oggetto perché assomiglia a un oggetto nel codice che lo utilizza. Viene comunemente utilizzato per sostituire un nome simbolico con un numero/variabile rappresentato come costante.
Esempio
L'esempio seguente è l'illustrazione di una macro semplice, ovvero macro simili a oggetti.
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;> }> |
>
>Produzione
Lockdown will be extended upto 31-MAY-2020>
2. Macro a catena
Le macro all'interno delle macro sono chiamate macro a catena. Nelle macro a catena viene espansa prima la macro genitore e poi la macro figlia.
Esempio
Il programma seguente è l'illustrazione di una macro a catena
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;> }> |
>
>Produzione
Geeks for Geeks have 138K followers on Instagram>
Spiegazione:
INSTAGRAM viene ampliato per primo per produrre FOLLOWERS. Quindi la macro espansa viene espansa per produrre il risultato come 138K. Questo è chiamato concatenamento di macro.
3. Macro multilinea
Una macro simile a un oggetto potrebbe avere più righe. Quindi per creare una macro su più righe devi usare backslash-newline.
Esempio
Di seguito è riportata l'illustrazione delle macro multilinea:
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;> }> |
>
>Produzione
Elements of Array are: 1 2 3>
4. Macro simili a funzioni
Queste macro sono identiche a una chiamata di funzione. Sostituisce l'intero codice anziché il nome di una funzione. È necessaria una coppia di parentesi immediatamente dopo il nome della macro. Se inseriamo uno spazio tra il nome della macro e le parentesi nella definizione della macro, quindi la macro non funzionerà .
Una macro simile a una funzione viene allungata solo se e solo se il suo nome appare seguito da una coppia di parentesi. Se non lo facciamo, il puntatore alla funzione otterrà l’indirizzo della funzione reale e porterà ad un errore di sintassi.
Esempio
L'esempio seguente è l'illustrazione di macro simili a funzioni
C
mvc java
// 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;> }> |
>
>Produzione
Minimum value between 18 and 76 is 18>
Ecco un esempio che aiuterà a comprendere meglio le macro:
Problema: Dobbiamo trovare l'area di un cerchio definendo ZONA(r) Macro.
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> |
>
>Produzione
Area of Circle with radius 7: 153.938>
Conclusione
Le macro sono piccoli pezzi di codice che possono essere eseguiti con un singolo comando. Possono essere utilizzati per automatizzare le attività, semplificare processi complessi e migliorare la produttività. Tuttavia, ci sono anche alcuni svantaggi nell’utilizzo delle macro. Ecco alcuni vantaggi e svantaggi delle macro:
Domande frequenti sulle macro C
Q1. Quali sono i vantaggi delle macro?
Risposta:
Maggiore produttività: le macro possono far risparmiare tempo e ridurre gli errori automatizzando le attività ripetitive. Personalizzazione: le macro possono essere personalizzate per soddisfare esigenze specifiche, consentendo una maggiore flessibilità nel modo in cui le attività vengono completate. Coerenza: le macro possono aiutare a garantire la coerenza delle attività seguendo una serie di istruzioni predeterminate. Efficienza: i macro possono eseguire attività più rapidamente degli esseri umani, migliorando l'efficienza complessiva. Facilità d'uso: le macro sono facili da creare e utilizzare e richiedono conoscenze di programmazione minime o nulle
Q2. Quali sono gli svantaggi dei Macro?
Risposta:
Rischi per la sicurezza: le macro possono rappresentare un rischio per la sicurezza se non sono adeguatamente protette o se vengono utilizzate per eseguire codice dannoso. Funzionalità limitate: le macro potrebbero non essere in grado di eseguire attività più complesse, limitandone l'utilità. Problemi di compatibilità: le macro potrebbero non essere compatibili con tutte le applicazioni software, limitandone l'utilità. Manutenzione: le macro possono richiedere manutenzione e aggiornamenti, che possono richiedere molto tempo e denaro. Dipendenza: fare eccessivo affidamento sui macro può comportare una diminuzione delle capacità di risoluzione dei problemi e del pensiero critico.
Q3. Una macro può accettare argomenti?
Risposta:
Sì, le macro possono accettare argomenti. Ad esempio, MAX è una macro che accetta due argomenti (a e b) e restituisce il massimo dei due.
Q4. Le macro possono essere ricorsive?
Risposta:
No, le macro non possono essere ricorsive. Se una macro diventa ricorsiva, la definizione fa riferimento a se stessa e porterà a un ciclo infinito durante la preelaborazione.