Comment écrire une macro?

Une question de débutant...!

En dépit de recherches sur le forum, je ne suis pas arrivé à trouver une explication claire sur l'écriture des macro avec des exemples.

J'ai cru comprendre qu'on les définissait à la suite d'un #define, mais la structure de ce qu'on met derrière est très floue.

J'ai essayé #define macro .... ou #define macro() sans sortir d'erreur de compilation, mais je ne suis pas sûr de ce que je fais.

Par exemple je voudrais faire quelque chose du genre:
#define strobe pin(high); pin(low); (avec bien évidemment la syntaxe qui va bien!)

Faut-il une virgule ou un point virgule pour séparer les items, finir par un point virgule, les entourer de {.....} ??

La syntaxe classique du C/C++ est-elle applicable?

Merci de vos infos ou d'un lien qui va bien.

OK, c'est bien ce que j'avais compris d'une macro "simple".

Par contre ce que je cherche c'est de créer une séquence de 2 ou trois instructions (comme dans mon exemple de "strobe") et de l'appeler comme une simple "fonction" ou "macro".

On peut faire ça en C ou en Assembleur, mais je ne sais pas si ça marche en ARDUINO, ni quelle est la syntaxe à respecter.

Ou alors il est peut être plus simple de créer une fonction sans argument?? mais ça me parait moins "élégant" comme solution 8)

void Strobe(void)....

Merci de vois conseils.
Gérard.

Bonjour,

L'"ARDUINO", comme tu dis c'est basiquement du C++. Donc ce que tu peux faire en C il y a 99% de chances que tu puisses le faire en arduino.

Par exemple:

// envoie un pulse sur la sortie
#define pulse(pin) digitalWrite(pin,HIGH); delay(100); digitalWrite(pin,LOW)

Pour l'appel

pulse(2);

Ou alors sans argument

// envoie un pulse sur la sortie
#define pulse digitalWrite(2,HIGH); delay(100); digitalWrite(2,LOW)

OK et merci.

Je saute sur mon clavier et j'essaye les deux solutions!

Bonne journée.

Je n'ai pas répondu à ta 2ème question
Dans la plupart des cas, il est plus élégant et plus lisible de faire ça avec une fonction

OK, plions nous aux convenances!!!!

Il y a aussi un impact en matière de performance/taille de code.

La macro duplique le code partout où elle est utilisée ==> plus rapide mais augmentation de la taille de l'exécutable.
A l'inverse, l'utilisation d'une fonction ralentit un peu l'exécution (appel/retour de la fonction avec la sauvegarde/restauration du contexte) mais le code est plus compact.

Si on est vraiment à la recherche de rapidité d'exécution (au détriment de la taille du code), la fonction peut aussi être déclarée inline. Dans ce cas le code de la fonction est directement inséré à chaque appel de cette fonction lors de la compilation.

Merci de vos réponses, complètes et informatives.

OK pour les macros, j'avais bien compris en ASM que le code était recopié à chaque fois et qu'il ne fallait pas en abuser sous peine de voir le fichier s'alourdir.

OK aussi pour la lisibilité avec les fonctions, ça me parait un bon argument.

Pour le choix, je pense qu'il faut raisonner en terme de vitesse: si on est ric rac il vaut mieux une macro ou un inline pour éviter un appel.

Bon WE

G