0

所以我试图解决这个警告:nonstandard conversion between pointer to function and pointer to data我还没有找到一个好的方法来做到这一点。这一切都是在 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(.....);

有没有一种好方法来解决这个警告而不必改变太多?如果不是,那么重写它的最佳方法是什么?

谢谢!

4

2 回答 2

1
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;
于 2012-06-22T17:23:31.087 回答
0

请参阅此对类似问题的答案。C 标准不允许将数据指针转换为函数指针,反之亦然。您可能可以在某些平台上执行此操作,但它不是可移植代码。

肖恩·布莱特的回答是处理这个问题的正确方法。您还可以使用泛型函数指针(不带参数的 void 返回)并转换为/从该类型转换,但在我看来这很危险。如果您使用特定的函数指针类型,当您尝试使用具有不同签名的函数时,编译器会警告您。

于 2012-06-22T18:08:16.100 回答