繁体   English   中英

C函数指针和typedef

[英]C function pointer and typedef

我得到了密码。 我需要使用以下函数,但是在调用它时遇到了问题。

int myFunction(const struct LQuery *pQuery, 
                   f_Callback Callback,
                   const void *pPriv);

我有以下定义

typedef void (f_Callback) (int NumOfRecordsFound,
                          void *pPriv,
                          const tL_QueryResult *pData);

我知道Callback应该是指向my_callbackFunction的指针,但是我似乎不明白如何为它设置参数。 据我了解pQuery传递给回调函数,但f_Callback需要3个参数。

int main (int Argc, char *pArgv[])
{
    myFunction(what should go here and WHY)
}

回调函数将从myFunction调用。 您只需要传递回调函数作为参数即可。 这是一个例子:

#include <stdio.h>

typedef void (f_Callback)(int a,
                          int b,
                          int c);

int myFunction(int a, f_Callback* callback)
{
    callback(a, a+1, a+2);
}

void myCallback(int a, int b, int c)
{
    printf("a: %d, b: %d, c: %d\n", a, b, c);
}

int main()
{
    myFunction(5, &myCallback);
    return 0;
}

预期产量:

$./a.out
a: 5, b: 6, c: 7

typedef不正确。 它应该是

typedef void (*f_Callback) (
              int NumOfRecordsFound,
              f_Callback Callback,
              const void *pPriv);

这是正确的功能指针-注意星号; 否则,它将为函数原型声明一个typedef,尽管它可以在函数声明中使用,但您不能将其本身用作变量。

如果您有类似的功能

int myFunction(const struct LQuery *pQuery, 
               f_Callback Callback,
               const void *pPriv);

还有一个回调

 void my_callback_function(int records_found, 
                           f_Callback callback, 
                           const void *priv)
 {
      ...
 }

您可以简单地调用myfunction

myFunction(the_query, my_callback_function, the_private_pointer);

左值my_callback_function将衰减为函数指针,因此不需要&字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM