C: pointeur de fonction et problème typedef
-
23-08-2019 - |
Question
J'ai une fonction C qui prend un pointeur de fonction comme argument, il est un destructor que je vais appeler à la fin de mon programme. Voici le prototype de ma fonction:
int store_dest(void (*routine)(void *));
Je veux conserver ce pointeur de fonction dans une structure avec d'autres infos. Afin d'avoir une belle struct, je veux avoir un typedef à ce pointeur de fonction. Voici mon typedef:
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 définir le champ « dest » à une fonction de mes, voici le prototype de cette fonction:
void* my_dummy_dest(void* foo);
Le problème (en fait, il est juste un avertissement, mais je voudrais supprimer) se produit lorsque je tente de définir le champ « dest » de ma structure « my_dummy_dest »:
my_struct.dest = &my_dummy_dest;
Je reçois un "avertissement: attribution du type pointeur incompatible"
Même quand je les compare:
if (my_struct.dest == &my_dummy_dest)
Je reçois un « avertissement: comparaison des types distincts de pointeur ne dispose pas d'un cast »
Mais je reçois pas d'avertissement quand je mets le champ « dest » avec une autre routine. Je ne comprends pas pourquoi je les avertissements.
La solution
Votre destructor factice est déclarée renvoyer un vide pointeur , pas un vide. Cette déclaration ne correspond pas au typedef pour votre pointeur de fonction destructor.
Autres conseils
Le typedef doit être:
typedef void *(*my_destructor)(void *);
Parce que my_dummy_test retourne void * au lieu de vide. Si vous voulez retourner void *, le typedef doit être
typedef void* (*my_destructor)(void *);