什么是回调函数
函数名作为另一个函数的形参。
像这样的
void func((*f)(int,int));
int add(int a,int b)
{
return a+b;
};
void func(add)
{
}
回调函数有什么作用呢
在接触一些嵌入式项目后,我觉得回调函数主要用于代码的封装,将内部数据处理部分不开放,提供两个函数接口,一个用于将自己的处理函数注册在内部库中,一个用于使用内部库的数据处理。这样只需2个接口即刻实现应用层编写。
下面结合一个stm32的例子:
int main(int argc, char *argv[])
{
KeyInit();//初始化驱动层
KeyScanCBSRegister(KeyScanHandle);//将keyscanhandle注册在库中
KeyPoll();//调用库中接口函数
return 0;
}
当检测到键盘有输入以后,主函数调用keypoll(),keypoll根据键盘的数据(keyval,keystate),传递给库中的内部函数指针pkeyscancbs,而之前的keyscancbsregister已经将keyscanhandle与pkeyscancbs绑定了,此时的pkeyscancbs即为自己写的处理函数,因此会根据键盘得到的数据调用自己写的处理函数keyscanhandle,从而实现了数据从库中到应用层的转移,也实现了对代码的保护。