Dans une invocation de macro, chaque paramètre effectif peut
être une suite quelconque d'unités lexicales, mais après expansion,
le texte obtenu doit être un fragment valide de langage C.
Voici un exemple des horreurs que l'on peut écrire en utilisant les macros :
#define macro(a,b) a [ b
f()
{
int i, t[10];
macro(t,i]) = 1; /* équivalent à t[i] = 1; */
}
Le second paramètre passé à la macro (i]) ne correspond syntaxiquement à
rien, mais le résultat de l'expansion de la macro est correct.
Matthieu Moy
2017-02-08