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. Voici un exemple d'utilisation:
#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. 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
.
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