C函数指针和typedef

时间:2017-06-02 11:03:38

标签: c function callback 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)
}

2 个答案:

答案 0 :(得分:3)

将从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

答案 1 :(得分:2)

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将衰减为指向函数的指针,因此不需要&个字符。