Considera il seguente codice:
INIZIOINTERO 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.cQuesto 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- La macro inizia sempre con #define
- macro_name è un nome definito dall'utente della macro
- macro_value è il valore della macro. Può essere qualsiasi cosa, ma una riga e il corpo della macro termina con le estremità di quella riga. Non richiede punto e virgola (;) alla fine. Anche lo spazio è considerato.
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_valuenome_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+yQuesta 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:
#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:
#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.