La possibilità di creare delle macro è molto importante nella programmazione avanzata. Il C89 permetteva di crearne purché accettassero un numero finito di variabili definito immediatamente. Nel C99 questa limitazione viene a cadere. Vediamo un piccolo esempio:
#include <stdio.h>
#include <string.h>
#define copia(funzione, ...) funzione(__VA_ARGS__)
int main(void) {
char s1[10];
copia(strcpy, s1,"salve");
printf("%s\n", s1);
}
Come potete osservare alla quarta riga la macro viene definita. I punti di sospensione indicano che la macro, oltre a funzione accetta un numero non precisato di variabili. Queste variabili verranno sostituite nella posizione specificata dall'indicatore __Pragma__
Alla riga 9 si fa uso della macro copia. Il resto del codice dovrebbe essere chiaro.