Pubblicita'
Linguaggio C: le Macro
-

Il preprocessore è un programma, richiamato prima della compilazione del sorgente, che esamina ed eventualmente modifica, il contenuto del sorgente.
Esso esamina le direttive: esegue operazioni indicate e poi le rimuove.Oggi andiamo a descrivere una parte del funzionamento della direttiva define, descrivendo come creare piccole e semplici macro.
Le macro possono essere definite come delle operazioni che vengono ricondotte ad una variabile costante.
Dalla teoria di base di linguaggio C sappiamo che, spesso, la direttiva define viene utilizzata per inserire delle costanti che, prima della compilazione, il preprocessore sostituisce nel sorgente con il valore stabilito all’inizio.
Per capirci meglio:#define VARIABILE 10
L’esempio definisce una costante di nome VARIABILE ed il processore, prima della compilazione, sostituirà tuttele occorrenze di VARIABILE nel codice sorgente.
Allo stesso modo possiamo definire le macro:
#define VARIABILE 10
#define MACRO1 (VARIABILE+1)
La macro MACRO1 esegue un incremento di 1 della costante VARIABILE e lo restituisce.
Quindi, come detto prima, il preprocessore ad ogni occorrenza di MACRO1 sostituirà il suo valore, cioè VARIABILE+1, cioè 10+1.E’ possibile definire vere e proprie funzioni:
#define MIN(x, y) ((x<y)?x:y)
#define UGUALE(x, y) ((x==y)?1:0)
#define SOMMA(x, y) (x+y)
#define SOTTRAI(x, y) (x-y)
#define MOLTIPLICA(x, y) (x*y)
#define DIVIDI(x, y) (x/y)
Nelle prime tre macro, dell’esempio, viene utilizzato l’operatore ternario per effettuare delle condizioni, il resto sono delle normali operazioni matematiche.
Prima della compilazione, il preprocessore si occuperà di sostituire ad ogni occorrenza di una macro, la relativa espressione.Ecco un esempio completo:
#include <stdio.h>
#define MAX(x, y) ((x>y) ? x : y)
int main()
{
int a, b;
printf("Inserisci primo numero: ");
scanf("%d", &a);
printf("Inserisci secondo numero: ");
scanf("%d", &b);
printf("Il più grande è: %d", MAX(a, b));
}In questo esempio la macro MAX viene utilizzata per determinare il massimo fra i due numeri passati come parametro.
Il preprocessore si occuperà di sostituire a MAX(a, b) la relativa espressione ((a >b) ? a : b).
Quindi la funzione printf sarà equivalente a:printf("Il più grande è: %d", ((a >b) ? a : b));
Le macro sono molto utili per la comprensibilità del codice sorgente: molte volte è più semplice leggere la macro che la corrispettiva espressione.
Un altro vantaggio è di sostituire funzioni corte con macro adatte, perchè quest’ultime non effettuano chiamate di sistema e quindi risparmiano varie operazioni del processore, rendendo il programma relativamente più veloce.
Vuoi tutti gli aggiornamenti di IbA's Blog in tempo reale? Abbonati ai nostri Feed RSS.



Loading...
















Commenti recenti