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.

Foi útil?

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 *);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top