Syntaxe :
#define nom_de_macro chaine_de_remplacement
La commande #define
est utilisée pour effectuer des remplacements
de chaines de caractères dans le fichier dans lequel elle se trouve.
En d'autres termes, le compilateur va parcourir le fichier et remplacer
le texte nom_de_macro
à tous les endroits où apparaît chaine_de_remplacement
.
#define
utilise le caractère fin de ligne pour délimiter la fin de
la chaine de remplacement.
Voici une utilisation classique de #define
(tout du moins en C)
#define VRAI 1 #define FAUX 0 ... int fini = 0; while (fini != VRAI) { ... }
#define
peut également prendre des arguments, ce qui permet de créer
des pseudo fonctions.
Considérons le code suivant :
#define valeur_absolue(x) ( ((x) < 0)?-(x):(x) ) ... int nb = -1; while (valeur_absolue(nb)) { ... }
Il est préférable de mettre des parenthèses supplémentaires lorsqu'on définit
des macros complexes. Dans l'exemple ci-dessus, la variable x
est toujours
entourée de parenthèses. Elle va ainsi être évaluée avant d'être comparée à 0
et multipliée par -1. D'autre part, la macro entière est entourée de parenthèses,
de façon à éviter que le code situé de part et d'autre lors de son appel ne
“contamine” la macro. Si vous n'êtes pas prudents, votre compilateur risque
de mal interpréter le code après le passage du préprocesseur.
Voici un exemple d'utilisation de commande #define
pour créer une boucle
for
générique d'incrémentation.
#define compter(v, debut, fin) \ for ((v) = (debut); (v) <= (fin); (v)++) ... int i; compter(i, 1, 20) { printf("i vaut %d\n", i); }
Sujets connexes : # and ##, #if,...,#endif, #undef