Macro di preprocessione (linguaggio C)
Le macro sono funzioni di preprocessione del linguaggio C. Sono elaborate dal preprocessore durante la compilazione del programma.
Creazione macro in C
Per creare una macro si utilizza la direttiva di preprocessione #define seguita dal nome e dall'espressione della funzione.
#define NOME(argomenti) espressione
Un esempio pratico
#define SOMMA(a,b) (a+b)
Per convenzione i nomi delle formule macro di preprocessione sono scritti con lettere maiuscole.
È consigliabile indicare l'espressione tra parentesi, anche se non è obbligatorio, per mantenere la precedenza degli operatori matematici nella formula.
Nota. Le macro sono indipendenti dal tipo di dato. È possibile usare come parametri i dati numerici e non, senza errori di compilazione.
Esempi pratici di macro
Esempio 1 ( somma )
Nella riga 2 è definita una semplice macro ADD con due parametri in input (a,b) che somma gli argomenti (a+b).
- #include <stdio.h>
- #define ADD(a,b) (a+b)
- int main() {
- int c=2;
- int d=3;
- printf(" %d ", ADD(c,d));
- return 0;
- }
La riga 6 chiama la macro ADD passandogli i parametri c e d.
La macro elabora l'espressione e calcola il risultato.
5
L'output del programma è 5 perché l'espressione c+d equivale a 2+3.
Esempio 2 ( concatenazione stringhe )
La macro nella riga 2 concatena i due argomenti in entrata tramite l'operatore di concatenazione ##.
- #include <stdio.h>
- #define CONC(a,b) a ## b
- int main() {
- int xy=10;
- printf(" %d ", CONC(x,y) );
- return 0;
- }
Nota. L'operatore ## concatena due valori (a,b) e li unisce in un'unico valore (ab).
La riga 5 richiama la formula CONC passando come parametri i caratteri x e y.
La macro restituisce la concatenazione xy che coincide con il nome della variabile dichiarata nella riga 4.
10
L'output del programma è 10 ossia il valore della variabile xy.
Esempio 3 ( stampa stringa )
Nella riga 2 è definita la macro STAMPA con un solo parametro in entrata (a).
La macro converte il parametro in una stringa tramite l'operatore # e lo stampa sullo schermo tramite l'istruzione printf.
- #include <stdio.h>
- #define STAMPA(a) printf(#a);
- int main() {
- STAMPA(attenzione versione obsoleta)
- return 0;
- }
Nota. L'operatore # mette il parametro tra doppi apici. Ad esempio, se il parametro è 12 viene trasformato in '12'.
La riga 5 richiama la macro STAMPA passando come parametro il messaggio "attenzione versione obsoleta".
La macro trasforma il parametro in una stringa e lo stampa a video.
attenzione versione obsoleta
L'output del programma è la stringa in questione.
Esempio 4 ( valore massimo )
La macro MAX trova il valore massimo dei parametri (a,b) usando una IF in linea.
- #include <stdio.h>
- #define MAX(a,b) ( (a>b) ? a : b )
- int main() {
- int a=1;
- int b=2;
- printf(" %d ", MAX(a,b));
- return 0;
- }
L'istruzione printf nella linea 7 richiama la macro MAX passandogli le variabili a e b.
La macro seleziona il valore maggiore.
2
L'output del programma è 2 ossia il valore più alto tra le due variabili.