Les macros avec paramètres

Une macro avec paramètres se définit de la manière suivante :
#define nom ( liste-de-paramètres-formels ) reste-de-la-ligne

La liste-de-paramètres-formels est une liste d'identificateurs séparés par des virgules. Le reste-de-la-ligne est appelé « corps de la macro ». Toute occurrence ultérieure de nom sera un appel de la macro et devra avoir la forme :
nom ( liste-de-paramètres-effectifs )
Dans la liste-de-paramètres-effectifs, les paramètres sont séparés par des virgules et chaque paramètre est une suite quelconque d'unités lexicales. Le préprocesseur remplace l'ensemble nom de la macro et liste de paramètres effectifs parenthésés, par reste-de-la-ligne dans lequel chaque paramètre formel est remplacé par le paramètre effectif correspondant. Cette opération de remplacement de texte porte le nom d'expansion de la macro.

L'utilité principale des macros avec paramètres est de bénéficier de la clarté d'expression des fonctions sans en souffrir la lourdeur : le code est inséré en ligne, donc on économise le code d'entrée et de retour de fonction. Exemple :

#define min(a, b)       ((a) < (b) ? (a) : (b))
#define max(a, b)       ((a) < (b) ? (b) : (a))

f()
{
int i,j,k;

i = min(j,k); /*  équivalent à : i =  j  <  k  ?  j  :  k ;              */
i = max(j,k); /*  équivalent à : i =  j  <  k  ?  k  :  j ;              */
}



Sous-sections

Matthieu Moy 2017-02-08