passage d'une fonction comme argument pour une autre fonction (Résolu) - C - Programmation
Marsh Posté le 07-03-2007 à 17:49:52
Avec un pointeur de fonction.
Marsh Posté le 07-03-2007 à 17:52:24
ReplyMarsh Posté le 07-03-2007 à 17:54:11
Comme j'ai la flemme :
http://mapage.noos.fr/emdel/notes.htm#pointeurs
edit : et pour l'utilité, y en a plein : callback, "routage", etc.
Zieute la fonction qsort() de la libC pour un très bon exemple
Marsh Posté le 07-03-2007 à 17:57:53
A passer une fonction en paramètre à une autre.
Genre une fonction de tri, tu passes en paramètre la fonction de comparaison à utiliser...
Marsh Posté le 07-03-2007 à 17:58:14
Marsh Posté le 07-03-2007 à 18:02:58
Mais on peut ce passer de l'utilisation des "pointeur sur fonctions" ou pas,
est ce que c'est aussi obligatoire (indispensable) que l'utilisation des pointeur sur variable dans certains cas ?
Marsh Posté le 07-03-2007 à 18:08:47
C'est un outil. Il est plus ou moins adapté à une tache donnée, on peut parfois employer d'autres outils pour effectuer la même tache, et parfois non.
Sinon, oui, les pointeurs de fonctions sont parfois obligatoires.
Par exemple lorsque tu écris une bibliothèque avec des fonctions génériques (exemple : qsort).
edit : tiens, je me contredis j'ai donc corrigé
Marsh Posté le 07-03-2007 à 18:12:46
Elmoricq a écrit : C'est un outil. Un outil n'est jamais obligatoire, il est juste plus ou moins adapté à une tache donnée. |
Ouais enfin en l'occurence en C les pointeurs de fonctions sont le seul moyen de passer une fonction en argument à une autre
Marsh Posté le 07-03-2007 à 18:13:38
Argl quelqu'un m'a quoté. Va falloir que j'assume la connerie que je viens d'écrire.
Donc oui, c'était pas génial ce que j'ai écrit.
Marsh Posté le 08-03-2007 à 09:27:32
big_dadi_fat a écrit : Peut on passer une fonction en argument à une autre fonction ? |
Non, mais on peut passer l'adresse d'une fonction (son nom, en fait) via un pointeur de fonction. exemple en C standard : qsort(), bsearch(), signal(), atexit()...
Citation : Si oui comment et c'est quoi l'utilité de le faire ? |
A faire une action particulière, définie par l'utilisateur. Ca sert quand on ecrit du code générique (indépendant de l'application), pour personnaliser certaines actions qui dépendent de l'implémentation.
Pour qsort(), par exemple, on définie la manière dont est faite la comparaison, car qsort() ne sait absolument pas comment sont structurées les données des champs. Il ne connait des adresses et des tailles. Ca permet que 95% du code de tri soit 'pré-écrit' et que l'utilisateur n'ai plus à se concentrer que sur les 5% restants (l'écriture d'une fonction de comparaison en fonction de ses données à lui).
Cette technique sert aussi à implémenter la programmation par 'évènements'.
http://mapage.noos.fr/emdel/complog.htm
Marsh Posté le 08-03-2007 à 09:42:10
big_dadi_fat a écrit : Mais on peut ce passer de l'utilisation des "pointeur sur fonctions" ou pas, |
C'est le seul moyen.
Rappel : on ne passe pas "la fonction", mais "l'adresse de la fonction". Pour passer une adresse, je ne connais que les pointeurs...
Marsh Posté le 08-03-2007 à 10:28:22
Emmanuel Delahaye a écrit : |
Ok merci.
Marsh Posté le 08-03-2007 à 10:33:39
un truc que j'avais fait à l'arrache
Code :
|
Marsh Posté le 08-03-2007 à 10:52:14
jagstang a écrit : un truc que j'avais fait à l'arrache
|
Oué ! Tellement à l'arrache, que c'est même pas du C...
|
Youpi !
Code :
|
Marsh Posté le 08-03-2007 à 11:04:16
Emmanuel Delahaye a écrit : Oué ! Tellement à l'arrache, que c'est même pas du C... |
J'ai précisé "à l'arrache". Coder en C n'est pas vraiment mon métier désolé
Marsh Posté le 08-03-2007 à 11:26:12
Ben dans ces cas-là, ne viens pas proposer d'exemple à un débutant en langage C si ton code est pourri.
Marsh Posté le 08-03-2007 à 11:29:14
Elmoricq a écrit : Ben dans ces cas-là, ne viens pas proposer d'exemple à un débutant en langage C si ton code est pourri. |
ouais ouais.
Marsh Posté le 07-03-2007 à 17:16:13
Salut
Peut on passer une fonction en argument à une autre fonction ?
Si oui comment et c'est quoi l'utilité de le faire ?
merci
Message édité par big_dadi_fat le 08-03-2007 à 10:28:52