Précisions sur le fonctionnement de la "macro"
Bonjour à tous.
Le principe du #define est le suivant:
#define bloc1 bloc2
Lorsque le compilateur fait un premier passage dit de "pre-process" il remplace le bloc1 par le bloc2.
Très couramment, bloc1 et bloc2 sont des constantes. Si cette constante est utilisée de nombreuses fois dans le programme, alors le mécanisme de #define permet de ne changer la valeur qu'une seule fois lors d'une évolution et d'être certain que le compilateur va substituer autant de fois que d'apparitions dans le code source: pas de risque d'oubli.
Si le bloc1 de la macro comprend des parenthèses, il y a aussi un argument entre ces parenthèses lors de l'invocation de la macro dans le source. Lorsque le compilateur substitue le bloc1 par le bloc2 dans le source il place dans le bloc2 l'argument qu'il a trouvé dans la ligne de code à la place de l'argument générique de la déclaration de la macro.
En plus le bloc peut contenir une expression autorisée en langage C, comme le forçage d'un bit par un OU logique.
Merci à tous de votre aide, je me suis permis de clarifier plus explicitement le fonctionnement de ces macros parce que j'avais un peu de mal et cette discussion était utile.
Une question reste: l'avantage d'une macro par rapport à une fonction C ?
Probablement la clarté du source ? (pour celui qui l'écrit!). parce qu'il y a une limite: chaque appel de macro ré-écrit le code source de la macro; c'est donc favorable pour des blocs courts (comme dans l'exemple).
A+.