Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2027 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [Résolu] Passage d'une fonction en paramètre ?!?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Passage d'une fonction en paramètre ?!?

n°505180
maestun
Posté le 02-09-2003 à 14:47:22  profilanswer
 

Bonjour,
Je suis tombé sur le bout de code suivant :
 

Code :
  1. int ProcessEdit(int CnxId,
  2.                 TListPtr CmdLineOpts,
  3.                 CharPtr  EditName,
  4.                 int (*ExecEdit) (int, char *, char *, char **),
  5.                 char ** DiagStr)
  6. {
  7. ...
  8. code_retour = ExecEdit(CnxId, SRVPath, StrFileName, DiagStr);
  9. ...
  10. }


On dirait qu'un fonction est passée en paramètre d'une autre fonction !
De plus, je ne trouve nulle par dans le projet la définition de la fonction ExecEdit(...).
 
Quelqu'un peut-il m'expliquer le mécanisme utilisé ci-dessus car je n'en ai jamais entendu parler :/
 
Merci !


Message édité par maestun le 02-09-2003 à 15:11:22
mood
Publicité
Posté le 02-09-2003 à 14:47:22  profilanswer
 

n°505183
HelloWorld
Salut tout le monde!
Posté le 02-09-2003 à 14:49:23  profilanswer
 

Ca s'appelle une fonction callback. Tu lui files une fct qu'il se charge d'appeler.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°505188
maestun
Posté le 02-09-2003 à 14:51:06  profilanswer
 

HelloWorld a écrit :

Ca s'appelle une fonction callback. Tu lui files une fct qu'il se charge d'appeler.


Tu veux dire que la fonction ExecEdit est appellée en même temps que ProcessEdit (2 threads) ?

n°505191
HelloWorld
Salut tout le monde!
Posté le 02-09-2003 à 14:51:57  profilanswer
 

Non, que ProcessEdit appelle ExecEdit...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°505195
maestun
Posté le 02-09-2003 à 14:53:28  profilanswer
 

HelloWorld a écrit :

Non, que ProcessEdit appelle ExecEdit...


Dans ce cas, pourquoi passe-t-on ExecEdit en paramètre plutôt que de l'appeller uniquement dans le corps de l fonction ProcessEdit ? Quel est la différence ?

n°505199
Taz
bisounours-codeur
Posté le 02-09-2003 à 14:55:39  profilanswer
 

HelloWorld a écrit :

Ca s'appelle une fonction callback. Tu lui files une fct qu'il se charge d'appeler.

ça c'est l'emploi. c'est tout simplement un pointeur de fonction
 
<type retour> (* nom_pointeur)([type arguments])

Code :
  1. size_t strlen(const char *);
  2. size_t (*length)(const char *);
  3. length = strlen;
  4. length = &strlen; /* équivalent */
  5. length("appel" );


Message édité par Taz le 02-09-2003 à 14:55:54
n°505202
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 02-09-2003 à 14:57:28  profilanswer
 

C'est pas la fonction qui est passée en paramètre, mais un pointeur sur la fonction [:aloy]
 
edit: [:benou_grilled]


Message édité par Harkonnen le 02-09-2003 à 14:58:08

---------------
J'ai un string dans l'array (Paris Hilton)
n°505213
maestun
Posté le 02-09-2003 à 15:03:38  profilanswer
 

Autrement dit, si on a :
 
 

Code :
  1. int ProcessEdit(int CnxId, 
  2.                 TListPtr CmdLineOpts, 
  3.                 CharPtr  EditName,
  4.                 int (*ExecEdit) (int, char *, char *, char **),
  5.                 char ** DiagStr)
  6. {
  7.   ...
  8.   code_retour = ExecEdit(CnxId, SRVPath, StrFileName, DiagStr);
  9.   ...
  10. }
  11. ...
  12. ProcessEdit(CnxId, Options, Name, MaFonctionTest, &diagstr);


La fonction MaFonctionTest va être appellée dans le corps de ProcessEdit, c'est ça ?
L'intérêt serait donc de "moduler" le code de ProcessEdit dynamiquement selon l'appel ?

n°505216
HelloWorld
Salut tout le monde!
Posté le 02-09-2003 à 15:04:42  profilanswer
 

Citation :

Dans ce cas, pourquoi passe-t-on ExecEdit en paramètre plutôt que de l'appeller uniquement dans le corps de l fonction ProcessEdit ? Quel est la différence ?


 
Je sais pas trop ce qu'est ton ProcessEdit, mais de faire ainsi ça te permet de choisir toi même le nom de la fonction et de lui filer ce que tu veux.
Exemple avec le quick sort :
http://www.opengroup.org/onlinepub [...] qsort.html
 
C'est une fonction de tri à qui tu files une fonction pour la comparaison des elements à trier.
Pour comparer des int tu peux filer une hypothétique CompareInt(), pour une struct à toi cmp(), ...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°505227
maestun
Posté le 02-09-2003 à 15:07:58  profilanswer
 

HelloWorld a écrit :


Je sais pas trop ce qu'est ton ProcessEdit, mais de faire ainsi ça te permet de choisir toi même le nom de la fonction et de lui filer ce que tu veux.


Je vois ce que tu veux dire...
Le pointeur sur fonction serait donc un "alias", qui permet de choisir le code à exécuter dans ProcessEdit en fonction de l'appel. M'enfin c'est ce qui me semble le + logique  ;)  
 
Merci à tous pour vos conseils, je me coucherai moins con ce soir !

mood
Publicité
Posté le 02-09-2003 à 15:07:58  profilanswer
 

n°505230
Taz
bisounours-codeur
Posté le 02-09-2003 à 15:10:45  profilanswer
 

remarque en C++: pour ceux qui utilise ce mécanisme en C++ plus tot que des références, la déférenciation du pointeur inhibe les directives inline. préférez donc les références, ou des objets fonctions.

n°505233
maestun
Posté le 02-09-2003 à 15:13:42  profilanswer
 

Taz a écrit :

remarque en C++: pour ceux qui utilise ce mécanisme en C++ plus tot que des références, la déférenciation du pointeur inhibe les directives inline. préférez donc les références, ou des objets fonctions.


Il me semble en effet que l'on peut éviter ce genre de mécanismes en C++ avec la notion d'objets. Mais le code que j'ai sous les yeux est en C pur et dur  [:trompette1]


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [Résolu] Passage d'une fonction en paramètre ?!?

 

Sujets relatifs
[résolu] double clic et JFileChooser[C++] Recuperer l'adresse d'une fonction virtuelle pure [modified]
[Resolu]Fichier batch ie automated connexion[Résolu] Collection d'objets vide...
[MySQL] Détection et suppression des redondances [résolu]comment est programmée la fonction 'rafraichir' de l'explorateur ?
fonction qui redirige vers une autre page ?[Résolu] Bug JmenuBar et Label
[Java] HTMLDocument modifié, mais balises affichées [résolu]Porblème lors d'un passage de paramètre
Plus de sujets relatifs à : [Résolu] Passage d'une fonction en paramètre ?!?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR