Exemple de mauvaise utilisation

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