Traductions de cette page?:

#define

Syntaxe:

    #define nom_de_macro chaine_de_remplacement

La commande #define est utilisée pour effectuer des remplacement de chaine de caractères dans le fichier dans lequel elle se trouve. En d'autres termes, #define fait que le compilateur va parcourir le fichier et remplacer le texte nom_de_macro dans tous les endroits où il apparait par chaine_de_remplacement. #define utilise le caractère fin de ligne pour délimiter la fin de la chaine de remplacement.

Voici une utilisation type que #define en C. (A ne pas faire en C++, où l'on préfèrera utiliser const.)

     #define TRUE 1
     #define FALSE 0
     ...
     int done = 0;
     while( done != TRUE ) {
        ...
     }

#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 num = -1;
     while( valeur_absolue( num ) ) {
        ...
     }

Il vaut mieux mettre des parenthèses supplémentaires autour des paramètres lorsque l'on définit des macros complexes. Dans l'exemple ci dessus, par exemple, la variable “x” est toujours entourée de parenthèses. Elle va ainsi être évaluée avant d'être comparée à 0 ou 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 soit évalué avec. 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ément d'un entier entre deux valeurs.

   #define count_up( v, low, high ) \
     for( (v) = (low); (v) <= (high); (v)++ )
 
   ...
 
   int i;
   count_up( i, 1, 20 ) {
     printf( "i is %d\n", i );
   }

Related topics: # and ##, #if,...,#endif, #undef