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

Respuestas a la pregunta(5)

Su respuesta a la pregunta