Ici PI n'est pas une variable, c'est seulement du texte, la ligne se transformera en:
printf("π = %f", 3.14159);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:
#include <stdio.h>
#define PI 3.14159
int main() {
printf("π = %f", PI);
return 0;
}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:
#define MAX(a, b) a > b ? a : bIci MAX(1, 2) sera remplacé par 1 > 2 ? 1 : 2 (donc 2).
Cela permet d'avoir une sorte de fonction sans type, donc utilisable avec des int et float.
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)
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