C: ponteiro e função problema typedef
-
23-08-2019 - |
Pergunta
Eu tenho uma função C que leva um ponteiro de função como argumento, é um destruidor que eu vou chamar no final do meu programa. Aqui é o protótipo da minha função:
int store_dest(void (*routine)(void *));
Eu quero armazenar este ponteiro de função em uma estrutura com algumas outras informações sobre. Para ter uma boa estrutura, eu quero ter um typedef para este ponteiro de função. Aqui é a minha typedef:
typedef void (*my_destructor)(void *);
E aqui está minha estrutura:
typedef struct my_struct{
my_destructor dest;
other_info ...
} my_struct;
Durante a etapa de inicialização, eu quero definir o campo "dest" para uma função do meu, aqui é o protótipo desta função:
void* my_dummy_dest(void* foo);
O problema (na verdade, é apenas um aviso, mas eu gostaria de suprimi-lo) ocorre quando tento definir o campo "dest" da minha estrutura para "my_dummy_dest":
my_struct.dest = &my_dummy_dest;
Eu recebo um "aviso: atribuição de tipo ponteiro incompatível"
Mesmo quando eu compará-los:
if (my_struct.dest == &my_dummy_dest)
Eu recebo um "aviso: a comparação dos tipos de ponteiro distintas carece de um elenco"
Mas tenho nenhum aviso quando eu definir o campo "dest" com outra rotina. Eu não entendo por que eu tenho essas advertências.
Solução
Seu destructor manequim é declarado para retornar um vazio ponteiro , não um vazio. Esta declaração não corresponde ao typedef para o seu ponteiro de função destructor.
Outras dicas
O typedef deve ser:
typedef void *(*my_destructor)(void *);
Porque my_dummy_test retorna void * em vez de vazio. Se você quiser retornar void *, o typedef deve ser
typedef void* (*my_destructor)(void *);