C : le pointeur de la fonction et de la définition de type de problème
J'ai une fonction C qui prend un pointeur de fonction comme argument, c'est un destructeur, que je vais appeler à la fin de mon programme. Voici le prototype de ma fonction :
int store_dest(void (*routine)(void *));
Je veux stocker cette fonction pointeur vers une structure avec quelques autres infos. Afin d'avoir une belle structure, je veux avoir un typedef pour ce pointeur de fonction. Voici ma définition de type :
typedef void (*my_destructor)(void *);
Et voici ma structure :
typedef struct my_struct{
my_destructor dest;
other_info ...
} my_struct;
Au cours de l'étape d'initialisation, je veux mettre le "dest" champ à une fonction de la mine, voici le prototype de cette fonction :
void* my_dummy_dest(void* foo);
Le problème (en fait c'est juste un avertissement, mais je voudrais la supprimer) se produit lorsque je tente de régler le "dest" champ de ma structure "my_dummy_dest" :
my_struct.dest = &my_dummy_dest;
Je reçois un "avertissement: l'affectation d'incompatible pointer type"
Même quand je viens de les comparer :
if (my_struct.dest == &my_dummy_dest)
Je reçois un "avertissement: comparaison de différents types de pointeur manque un cast"
Mais je n'ai pas d'avertissement lorsque j'ai mis le "dest" domaine avec une autre routine. Je ne comprends pas pourquoi j'ai ces mises en garde.
OriginalL'auteur claf | 2009-04-05
Vous devez vous connecter pour publier un commentaire.
Votre mannequin destructeur est déclarée pour retourner un vide pointeur, pas un vide. Cette déclaration ne correspond pas à la définition de type de votre destructeur de pointeur de fonction.
OriginalL'auteur
Le typedef devrait être:
OriginalL'auteur Stephan202
Parce que my_dummy_test retourne void*
au lieu de void. Si vous souhaitez retourner un void*, le typedef devrait être
OriginalL'auteur Joao da Silva