logo

Macro e suoi tipi in C

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.