C Define

Da Andreabont's Wiki.

Una define in C è una direttiva del preprocessore che associa una sequenza di caratteri ad una etichetta, ogni qualvolta che il preprocessore trova quella etichetta nel codice la sostituisce con la stringa definita. Questo sistema è usato per definire in C delle costanti e delle macro. Normalmente una define è dichiarata su una sola linea, se è necessario effettuare define su più linee è necessario far terminare ogni linea con il carattere \.

Costanti

#define COSTANTE 5

Macro

Le macro accettano dei parametri in ingresso che verranno sostituiti nella stringa, le parentesi sono state messe per imporre il corretto ordine di esecuzione degli operatori in caso di sostituzioni particolari.

Semplice

E' possibile definire delle funzioni semplici che saranno sotituite nel punto dove la macro viene chiamata:

#define ABS(a) (a)<0 ? -(a) : (a)

E' possibile utilizzare anche una sintassi particolare per concatenare i caratteri.

#define concatenate_basic(a,b) a ## b

Oppure trasformarli in una stringa del C:

#define stringify(a) #a
#define concatenate_string(a,b) stringify(a ## b)

Template

#define GENERIC_MAX(type) \
  type type##_max(type x,type y) \
  {              \
    return x>y?x:y;      \
  }
 
static GENERIC_MAX(double)

int main(void) {
   double max = double_max(a, b);
}