C Programmazione

Macro in linguaggio C

Macro in linguaggio C
Una macro in linguaggio C è un pezzo di codice a cui è stato assegnato un nome. Quando il nome viene utilizzato in qualsiasi punto del programma, il valore della macro viene sostituito prima della compilazione del programma. In questo articolo vedremo in dettaglio come scrivere una macro in linguaggio C.

Considera il seguente codice:

INIZIO
INTERO n=5;
PRINT("Il valore di n è %d",n);
FINE

Il codice sopra non è un codice C valido.

Ma il seguente codice è valido:

//Esempio 1.c
#define START int main()
#define FINE
#define INTEGER int
#define PRINT(A,B) printf(A,B)
INIZIO
INTERO n=5;
PRINT("Il valore di n è %d",n);
FINE

Prima della compilazione le macro START, INTEGER, PRINT e END sono state sostituite dal loro valore, e il codice diventa un codice C valido. Possiamo verificare utilizzando il seguente comando:

gcc -E Esempio1.c

Questo comando verrà visualizzato dopo aver espanso tutte le macro.

Ora vedremo diversi tipi di macro:

1. Macro simili a oggetti:

Sintassi:

#define nome_macro valore_macro

Se la macro occupa più di una riga possiamo farlo come segue:

#define nome_macro valore_macro1 \
valore_macro2 \
macro_value3
#define MAX 200

Questa macro sembra un oggetto dati, ecco perché questo tipo di macro viene chiamato come macro simile a un oggetto.

//Esempio2.c
//#includere
#define MAX 200
intero principale()

printf("Il valore MAX è: %d",MAX);
restituisce 0;

Nel Esempio2.c, MAX è una macro. Dall'output, osserviamo che MAX è sostituito dal suo valore 200.

2. Macro di tipo funzionale:

Sintassi:

#define macro_name() macro_value

nome_macro è un nome definito dall'utente della macro. La coppia di parentesi deve essere posta dopo il nome_macro. Nessuno spazio è consentito tra nome_macro e parentesi. Possiamo anche passare argomenti in questo tipo di macro.

#define add(x,y) x+y

Questa macro sembra una chiamata di funzione, ecco perché questo tipo di macro è chiamato macro simile a una funzione function.

//Esempio3.c
#define add(x,y) x+y
intero principale()

int a;
galleggiante b;
a = aggiungi(4,5);
b = aggiungi(2.5,3.6)
restituisce 0;

Nell'esempio 3.c, abbiamo visto che a differenza della funzione C, la macro sostituisce solo il codice con argomenti senza calcolarlo. Quindi, possiamo passare diversi tipi di dati usando la stessa macro.

Se mettiamo uno spazio tra il nome della macro e le parentesi, funziona come una macro simile a un oggetto. Sotto C L'esempio lo illustra.

//Esempio4.c
#define aggiungi (x,y) x+y
intero principale()

int a;
galleggiante b;
a = aggiungi(4,5);
b = aggiungi(2.5,3.6)

Nell'esempio4.c, abbiamo visto che la macro add è sostituita da (x,y) x+y . Uguale a una macro simile a un oggetto.

3. Macro per incollare token:
In linguaggio C, l'operatore ## viene utilizzato per incollare i token. Usando questo operatore, possiamo combinare due token validi in un token valido.
Esempio:

//Esempio5.c
#define MARGE(x,y) x##y
intero principale()

int num = MARGE(52,34);
restituisce 0;

Se proviamo a incollare un token che non genera un token valido, il compilatore C restituisce un errore o un avviso.

//Esempio6.c
#define MARGE(x,y) x##y
intero principale()

int num = MARGE(52,+);
restituisce 0;

Nel Esempio6.c, abbiamo un messaggio di errore perché, dopo una combinazione di due token, otteniamo un token non valido '52+'.

4. Macro per stringere:
In linguaggio C, l'operatore # viene utilizzato per convertire un parametro macro in una costante stringa. Quando un operatore # precede con un parametro macro, il parametro si converte in una stringa letterale. La stringa può essere utilizzata per macro simili a oggetti e funzioni function.
Esempio:

//Esempio7.c
#define STRINGIZZAZIONE(x) #x
intero principale()

printf(STRINGIZING(Hello World) );
restituisce 0;

Nel Esempio7.c abbiamo una stringa "Hello World" usando la macro STRINGIZING.

Conclusione:

Questo articolo ha imparato a conoscere tutti i tipi di macro-like Macro simili a oggetti, Macro di tipo funzionale, Macro per incollare token, Macro per stringere e Macro per stringere in linguaggio C. Ora possiamo usare una macro nel nostro programma C senza alcun dubbio.

I migliori giochi da giocare con il tracciamento delle mani
Oculus Quest ha recentemente introdotto la grande idea del tracciamento manuale senza controller. Con un numero sempre crescente di giochi e attività ...
Come mostrare l'overlay OSD in app e giochi Linux a schermo intero
Giocare a giochi a schermo intero o utilizzare app in modalità a schermo intero senza distrazioni può tagliarti fuori dalle informazioni di sistema ri...
Le 5 migliori carte di acquisizione del gioco
Abbiamo tutti visto e amato i giochi in streaming su YouTube. PewDiePie, Jakesepticye e Markiplier sono solo alcuni dei migliori giocatori che hanno g...