Pregunta

Tengo una función C que tiene un puntero a función como argumento, es un destructor que voy a llamar al final de mi programa. Aquí es el prototipo de mi función:

int store_dest(void (*routine)(void *));

Quiero guardar este puntero de función en una estructura con algunas otras informaciones. Con el fin de tener una buena estructura, quiero tener un typedef a este puntero de función. Aquí está mi typedef:

typedef void (*my_destructor)(void *);

Y aquí es mi estructura:

typedef struct my_struct{
  my_destructor dest;
  other_info ...
} my_struct;

Durante la etapa de inicialización, quiero establecer el campo "destino" a una función de la mía, aquí es el prototipo de esta función:

void* my_dummy_dest(void* foo);

El problema (de hecho, es sólo una advertencia, pero me gustaría suprimirlo) se produce cuando intento para establecer el campo "destino" de mi estructura para "my_dummy_dest":

my_struct.dest = &my_dummy_dest;

consigo un "aviso: la asignación de tipo de puntero incompatible"

Lo mismo cuando acabo de compararlos:

if (my_struct.dest == &my_dummy_dest)

consigo un "aviso: la comparación de distintos tipos de puntero carece de una conversión"

Pero consigo ninguna advertencia cuando me puse el campo "destino" con otra rutina. No entiendo por qué tengo esas advertencias.

¿Fue útil?

Solución

Su destructor maniquí se declara para devolver un vacío puntero , no un vacío. Esta declaración no coincide con el typedef para el puntero de su función de destructor.

Otros consejos

El typedef debe ser:

typedef void *(*my_destructor)(void *);

Debido my_dummy_test devuelve void * en lugar de vacío. Si desea volver void *, el typedef debe ser

typedef void* (*my_destructor)(void *);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top