一般来说,回调是与注册是一对的。你先把函数地址注册给我,我到需要的时候就会回调这个函数。
其实只要记住一条,函数其实也有地址,回调函数注册函数都是用的函数的地址。。函数名就是个函数的地址而已。。
比如说A.h中有如下代码:
typedef int (*function)(int,int);/*重定义一个类型,该类型为这样的一个函数指针*/
struct callback_function
{
function callback;/*定义一个函数指针*/
/*当然,也可以直接 int (*callback)(int,int);和上面的是一样的效果*/
};
然后在B.c中有如下代码:
int max(int a,int b)
{
return ((a>b)?a:b);
}
pstdata = (struct callback_function*)malloc(sizeof(struct callback_function));
memset(pstdata,0,sizeof(struct callback_function));
pstdata.callback = max ;
然后将pstdata的值传给A.c,在A.c中就可以直接用pstdata->callback(a,b)了。
这样做的好处是可以实现我不知道你函数叫什么名字,但是我知道我在具体环境该掉这个函数就可以了。。回调函数实现了通用性。