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 標準では、データ ポインターを関数ポインターにキャストすること、およびその逆を許可していません。一部のプラットフォームではできるかもしれませんが、移植可能なコードではありません。

Sean Bright の答えは、これを処理する適切な方法です。ジェネリック関数ポインター (パラメーターなしの void return) を使用して、その型との間でキャストすることもできますが、それは私の意見では危険です。特定の関数ポインター型を使用する場合、別のシグネチャを持つ関数を使用しようとすると、コンパイラーから警告が表示されます。

于 2012-06-22T18:08:16.100 に答える