Salut,
en C, tu peux aussi faire des pointeurs sur fonction et donc un tableau de pointer sur fonction. Si c'est de l'arduino je ne sais pas en revanche si ça fonctionne.
De mémoire par contre il faut que toutes les fonctions aient le même nombre de paramètre.
Une recherche sur gogole permet de trouver plein d'exemples de pointeurs de fonctions (et donc de tableau de pointeurs de fonction):
La déclaration est du style:
type_retour (*nom_de_mon_pointeur)(typedeparam, ..., typedeparam)
Ce qui donne sur ton exemple un truc genre: (considérant que avance est déclaré style int avance(int ordre)
int (*mon_pointeur_avance)(int) = avance
ou
int (*mon_pointeur_avance)(int) = &(avance)
pour un pointeur sur la fonction avance qui prend un int en entrée (et retourne un int)
Après faut faire le tableau de ces pointeurs, ce qui se fait par exemple:
typedef int (*fptr)(int); //le typedef permet d'être plus compréhensible je trouve
fptr action[4]; //on déclare un tableau nommé "action" de 4 éléments pointeurs sur fonction comme montrer avant
L'avantage c'est que ça évite le switch ou autre, comme ton action est déjà un tableau, un simple action[action1]() ferra l'appel de fonction pour toi.
on initialise le tableau d'abord:
action[0] = &stop
action[1] = &recule
action[2] = &avance
...
ou d'ailleurs sinon on peut faire définition et init en une ligne mais c'est moins lisible je trouve:
int (*action[]) () = {&stop, &recule, &avance, ...};
A l(utilisation, tu fais comme dans ton exemple:
action[action1]();
ou une façon que j'aime beaucoup grâce au tableau (même si c'est pas super lisible):
(**(action+action1))();
On utilise beaucoup ce genre de "techniques" pour faire juste des "switch case" qui s’exécutent en temps constant, que ce soit le premier ou dernier choix, on fait juste un saut dans un tableau, ça permet aussi d'optimiser pas mal les perfs dans ce genre de cas.