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.

Était-ce utile?

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 *);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top