指针到函数指针之间的转换错误

标签 c casting typedef gcc-warning

所以我试图解决这个警告:指向函数的指针和指向数据的指针之间的非标准转换我还没有找到一个好的方法来做到这一点。这都是用 c 而不是 c++ 完成的。

目前我有一个头文件:

typdef struct myConnection_s
{
    ...
    void*   Callback
} myConnection_t, *Connection


typdef HRESULT (*HttpHook)(Connection, char*);

在其他文件 foo.c 中我有:

....
Connection myConnection;
...

HttpHook myHook = (HttpHook) myConnection->Callback;
...
return myHook(.....);

有没有一个好的方法可以解决这个警告而不需要做太多的改变?如果不是,重写这个的最佳方法是什么?

谢谢!

最佳答案

typedef struct myConnection_s
{
    /* ... */
    HttpHook Callback;
} myConnection_t, *Connection;

您也可以稍后删除显式强制转换:

HttpHook myHook = myConnection->Callback;

if (myHook)
    myHook(/* ... */);

编辑:您似乎遇到了排序问题...请尝试以下操作:

struct myConnection_s;

typedef HRESULT (*HttpHook)(struct myConnection_s *, char*);

typedef struct myConnection_s
{
    /* ... */
    HttpHook Callback;
} myConnection_t, *Connection;

关于指针到函数指针之间的转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11161137/

相关文章:

c - 正确使用 malloc

c++ - 当我们进行向下转型时内部会发生什么?

c# - 在 C# 中的相似类型之间进行转换

c - 什么是 'forward declaration' 以及 'typedef struct X' 和 'struct X' 之间的区别?

C++ 理解 typedef

c - 为什么 printf 中的格式标记为 restrict?

c - 了解 char 数组初始化行为

casting - 避免转换浮点常量

C++ typedef 静态函数指针 : undefined symbol

c - 如何使用 WinAPI 作为另一个用户启动通用应用程序?