Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Passer en argument le nom d'une fonction à exécuter

11 réponses
Avatar
Nicolas Hervé
Je veux passer en option à ma fonction principale le nom d'une fonction
secondaire qui sera utilisé pour une certaine action.
Le but est de pouvoir choisir à l'exécution quel algo on va pouvoir
utiliser.

Ces fonctions secondaire seront dans une librairie chargé dynamiquement.

En quelque sorte je souhaite développer une API avec déjà quelques algos
implémentés pour ma fonction secondaire et permettre à l'utilisateur
d'étendre à d'autres algos.

1 réponse

1 2
Avatar
Emmanuel Delahaye
In 'fr.comp.lang.c', Nicolas Hervé wrote:

Je veux passer en option à ma fonction principale le nom d'une fonction
secondaire qui sera utilisé pour une certaine action.
Le but est de pouvoir choisir à l'exécution quel algo on va pouvoir
utiliser.

Ces fonctions secondaire seront dans une librairie chargé dynamiquement.

En quelque sorte je souhaite développer une API avec déjà quelques algos
implémentés pour ma fonction secondaire et permettre à l'utilisateur
d'étendre à d'autres algos.


Ca s'appelle un callback. Pas de difficulté particulière. Il faut passer la
fonction par un pointeur du même type. Pour éviter les écritures gores, il
est conseillé d'utiliser un typedef (chez moi, suffixe '_f' comme fonction)

Par exemple :

/* main.c */
#include "list.h"

#include <stdio.h>

void cb_print (char const *s)
{
printf ("%s ", s);
fflush (stdout);
}

int main (void)
{
static char *tab[] {
"Hello",
"wild" ,
"world!",
};

list (tab, sizeof tab / sizeof *tab, cb_print);
printf ("n");

return 0;
}

avec:

#ifndef H_LIST
#define H_LIST
/* list.h */

#include <stddef.h>

typedef void list_f (char const *);

void list (char const *const *tab, size_t nb, list_f * pf);

#endif /* guard */

/* list.c */
#include "list.h"

void list (char const *const *const tab
,size_t const nb
,list_f * const pf)
{
if (pf != NULL)
{
size_t i;

for (i = 0; i < nb; i++)
{
if (tab[i] != NULL)
{
pf (tab[i]);
}
}
}
}

--
-ed- [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
C-reference: http://www.dinkumware.com/manuals/reader.aspx?lib=cpp
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/

1 2