Espaces de noms
Variantes
Affichages
Actions

#define

De cppreference.com


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