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