Appeller une fonction avec son adresse, comme paramètre d'une autre fonction

Je ne parle pas du contenu mais de la fonction qui réalise l'affichage.
Ce que je veux dire c'est que si la fonctionne ne change pas, je ne vois pas l'intérêt de passer par cette indirection qui ne fait que rendre le code plus abscons.

De quoi ? De la fenêtre ou de l'icône ?

C'est toi qui a parlé de

Si la fonction qui dessine l'icône est toujours la même l'usage du pointeur de fonction est inutile.

Non, logiquement, l'icône ne doit pas être la même.

Dernière tentative de me faire comprendre.
Je parle de la fonction pas de ses arguments.
Si tu as N icônes et une seule fonction qui gère l'affichage de cette icône il n'y a nul besoin de passer par un pointeur sur la fonction il suffit jute de changer l'argument passé à la fonction.

Très sincèrement désolé de ne pas avoir compris. :worried:

Non, il y a une fonction pour chaque logo. (Vectoriel en tout cas)

Parce que c’est le code de la fonction qui fait le dessin, par appel à des fonctions de dessins c’est ça ? (Et pas un bitmap)

Philippe je suis dans le même cas.
En fait ce que j’aimerais ”essayer” de comprendre ce n’est pas si c’est utile ici, mais c’est dans quels cas c’est utile.

Il me semble que la reponse a la question ”est-ce utile ici” viendrait naturellement.

Bonjour @techvij, @J-M-L, @68tjs,

Bon comme @kamill te l'a justement fait remarquer ce que tu veux faire @techvij c'est ça :

et ça fonctionne parfaitement ! Donc tout va bien.

Mais du coup ces fonctions servent à ce qu'évoque @J-M-L :

et :

bonne journée.

J'ai fait il y a quelques années des lunettes équipées d'anneaux de LEDs, pour Halloween.
Pour varier les animations des LEDs, j'utilisais un tableau de fonctions, chacune jouant une animation, appelées par la loop avec une boucle for.
Ça me semblait plus pratique, et plus concis en terme de lisibilité du code, qu'un switch ou une batterie de if.

Le code est quelque part sur le forum, dans les réalisations terminées. J'avais posé la même question et reçu de l'aide du forum.

  • Quand on utilise des callback en programmation par événement par exemple.
  • On pourrait aussi imaginer une structure (ou une liste chaînée), pour décrire le contenu d'un écran, qui contiendrait des informations et un pointeur vers la fonction pour les afficher.
    Mais sur des petites structures comme la UNO c'est un peu too much.

Pour essayer de répondre dans quel cas c'est utile, je dirais que le cas le plus "courant/standard" est l'appel d'une callback, donc une fonction que tu veux appeler mais que le code qui l'appel ne connais pas par avance.
Par exemple l'interaction d'un code avec une librairie.

Je ne savais pas qu'un tableau de fonctions était possible ! Mais c'est vrai qu'en y pensant, c'est logique, on peut plus ou moins considérer une fonction comme une variable (les deux retournent une valeur, sauf avec void pour la fonction).

Et fait ce qui ressemblerait à ça suffirait :

void fenetre(const char* titre, void (*ptrFonction)(/* int ou rien ?*/)) {
  //Bouton fermer
  //Barre du haut
  unsigned int hauteurBarreTitre = hauteurEcran / 10; // Par exemple (je simplifie il y a beaucoup de sécurités pour la comptabilité
  //Texte barre du haut
  (*ptrFonction)(0, 0, hauteurBarreTitre, hauteurBarreTitre); //x, y, X2, y2

}

Merci @lesept, @fdufnews, @terwal
J'ai compris maintenant.

Bonne journée

Pas vraiment, une fonction n'est pas du tout une variable, c'est du code à un endroit de la mémoire, une variable étant aussi une portion mémoire.

tu n'a donc pas de tableau de fonction à proprement parlé, mais un tableau d'adresse mémoire.
Dans un telle tableau tu peux donc stocker des adresse mémoire, c'est à toi de savoir sur quoi pointe ces adresses mémoire.

Un tableau de n’importe quel type est possible de manière générale

Une fonction est une entité du code qui dispose d’un type et d’une adresse. Ce n’est pas variable, mais on peut avoir une variable de ce type qui contient la référence vers la fonction.

Cf Functions - cppreference.com

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.