bonjour,
est-ce qu'il est possible en C de mettre en parametre une fonction fct2 dans une autre fonction fct1, par exemple void fct1(fct2, int a) ?
merci de vos reponses.
bonjour,
est-ce qu'il est possible en C de mettre en parametre une fonction fct2 dans une autre fonction fct1, par exemple void fct1(fct2, int a) ?
merci de vos reponses.
Salut,
Oui c'est possible avec les "pointeurs de fonction", il y a quelques fonctions de la librairie standard qui utilisent cette technique, exemple :
Ici le 4eme paramètre doit être un pointeur sur une fonction ayant le prototype donné (retourne un int et a 2 paramètres const void *)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 void qsort (void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));
http://man.developpez.com/man3/qsort.3.php
Effectivement, si la signature de la fonction que tu veux mettre en paramètre ressemble à :alors la fonction qui prendra fct en pramètre devra avoir une signature du genre
Code C : Sélectionner tout - Visualiser dans une fenêtre à part int fct(void *arg). A chaque fois que tu voudras appeler une fct en paramètre de Tafonction, il faudra veiller à ce que la signature de fct corresponde bien à la signature attendu en paramètre.
Code C : Sélectionner tout - Visualiser dans une fenêtre à part TonType Tafonction(int (*ptfct)(void *),.....)
Un rapide exemple pour te montrer l'utilisation des pointeurs de fonction.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 #include <stdio.h> int fct2 (int i) { return i*10; } int fct3 (int i) { return i*100; } void fct1(int (*f)(int), int a) { printf ("f(%d)=%d\n", a, f(a)); } int main () { fct1 (fct2, 7); fct1 (fct3, 7); return 0; }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager