C Language Estensione: assegna la macro X come argomento


Esempio

L'approccio X-macro può essere generalizzato un po 'rendendo il nome della macro "X" un argomento della macro master. Questo ha il vantaggio di aiutare a evitare le collisioni dei nomi di macro e di consentire l'uso di una macro generica come la macro "X".

Come sempre con le macro X, la macro master rappresenta un elenco di elementi il ​​cui significato è specifico per quella macro. In questa variante, una tale macro potrebbe essere definita in questo modo:

/* declare list of items */
#define ITEM_LIST(X) \
      X(item1) \
      X(item2) \
      X(item3) \
/* end of list */

Si potrebbe quindi generare codice per stampare i nomi degli oggetti in questo modo:

/* define macro to apply */
#define PRINTSTRING(value) printf( #value "\n");

/* apply macro to the list of items */
ITEM_LIST(PRINTSTRING)

Questo si espande a questo codice:

printf( "item1" "\n"); printf( "item2" "\n"); printf( "item3" "\n");

In contrasto con le macro X standard, dove il nome "X" è una caratteristica incorporata della macro master, con questo stile potrebbe non essere necessario o addirittura non desiderabile dopo aver indefinito la macro utilizzata come argomento ( PRINTSTRING in questo esempio).