我试图运行以下程序,但得到一些奇怪的错误:
档案1.c:
typedef unsigned long (*FN_GET_VAL)(void);
FN_GET_VAL gfnPtr;
void setCallback(const void *fnPointer)
{
    gfnPtr = *((FN_GET_VAL*) (&fnPointer));
}
档案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 */
}
这里使用gcc编译时,gfnPtr()在64位suse linux上崩溃.但它成功调用了gfnPtr()VC6和SunOS.
但如果我改变下面给出的功能,它就能成功运行.
void setCallback(const void *fnPointer)
{
    int i; // put any statement here
    gfnPtr = *((FN_GET_VAL*) (&fnPointer));
}
请帮助解决问题的原因.谢谢.