#define

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