unción de puntero de función @C para anular puntero
Estoy tratando de ejecutar el siguiente programa pero obtengo algunos errores extraños:
Archivo 1.c:
typedef unsigned long (*FN_GET_VAL)(void);
FN_GET_VAL gfnPtr;
void setCallback(const void *fnPointer)
{
gfnPtr = *((FN_GET_VAL*) (&fnPointer));
}
Archivo 2.c:
extern FN_GET_VAL gfnPtr;
unsigned long myfunc(void)
{
return 0;
}
main()
{
setCallback((void*)myfunc);
gfnPtr(); /* Crashing as value was not properly
assigned in setCallback function */
}
Aquí el gfnPtr () se bloquea en suse linux de 64 bits cuando se compila con gcc. Pero con éxito llamando a gfnPtr () VC6 y SunOS.
Pero si cambio la función como se indica a continuación, está funcionando correctamente.
void setCallback(const void *fnPointer)
{
int i; // put any statement here
gfnPtr = *((FN_GET_VAL*) (&fnPointer));
}
Por favor ayuda con la causa del problema. Gracias