Sintassi:
#define nome-macro stringa-di-sostituzione
Il comando #define è utilizzato per fare sostituzioni nel file dove è situato. In altre parole #define indica al preprocessore di sostituire in tutto la definizione della macro con quella della stringa di sostituzione. La stringa di sostituzione si ferma alla fine della linea del #define
Ecco un uso tipico di #define (almeno in C):
#define TRUE 1 #define FALSE 0 ... int done = 0; while( done != TRUE ) { ... }
Un'altra caratteristica di #define è quella di accettare argomenti, cosa che lo rende utile come creatore di pseudo-funzioni. Si consideri il seguente codice:
#define absolute_value( x ) ( ((x) < 0) ? -(x) : (x) ) ... int num = -1; while( absolute_value( num ) ) { ... }
Quando si definiscono macro con una certa complessità è generalmente una buona idea
aggiungere qualche parentesi in più.
Si noti che nell'esempio precedente la variabile “x” è sempre messa tra
parentesi. In questo modo il testo tra parentesi viene valutato prima di essere
confrontato con lo 0 o moltiplicato per -1. Inoltre l'intera macro è posta
tra parentesi per prevenire che venga contaminata da altro codice. Se non si è
attenti si corre il rischio che il preprocessore possa confondersi nell'interpretare il
codice. Ecco un esempio di come usare #define per creare un ciclo for
che stampa una successione di numeri:
#define count_up( v, low, high ) \ for( (v) = (low); (v) <= (high); (v)++ ) ... int i; count_up( i, 1, 20 ) { printf( "i is %d\n", i ); }
Argomenti Correlati: # e ##, #if,...,#endif, #undef