4.2 #define

La macro #define permet de définir (et oui!) du texte à remplacer pendant la compilation, comme avec #include mais ici c'est un simple texte. Voici un exemple d'utilisation:

#include <stdio.h>

#define PI 3.14159

int main() {
    printf("π = %f", PI);

    return 0;
}

Attention!

Ici PI n'est pas une variable, c'est seulement du texte, la ligne se transformera en:

printf("π = %f", 3.14159);

Nous pouvons aussi ajouter des arguments et même des expressions. Voici un exemple:

#define MAX(a, b) a > b ? a : b

Cela permet d'avoir une sorte de fonction sans type, donc utilisable avec des int et float.

Attention!

C étant un langage assez vieux, les messages d'erreur ne sont pas minimalistes, donc vous pourrez très vite avoir ce genre de message:


main.c: In function ‘main’:
main.c:1:21: error: invalid operands to binary > (have ‘Human’ and ‘Human’)
    1 | #define MAX(a, b) a > b ? a : b
      |                     ^
main.c:11:23: note: in expansion of macro ‘MAX’
   11 |     Human greatest = MAX(bob, jakeulineu);
      |                      ^~~

Certes, ici ce n'est pas si horrible que ça car il n'y a qu'une seule erreur dans une seule macro, mais ça peut très vite être un bazar. (l'erreur ici c'est que l'opérateur > n'est pas compatible avec Human et Human)

Notes

Il y a d'autres macros, comme celles appelées "pragma" ou encore celles qui permettent d'avoir des conditions avec #IF et #ELSE; mais nous n'allons pas les utiliser.

Si l'Université de Poitiers les intègre dans leur cours, je le ferai aussi pour y être conforme.

Source: Wikipedia