最近在看LWIP,看到了回调函数,似乎没有系统的了解过回调函数,今天就简单学习总结一下
1.含义
先了解一下什么是回调函数,看一下百科的回答
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
回调是任何一个被以方法为其第一个参数的其它方法的调用的方法。很多时候,回调是一个当某些事件发生时被调用的方法。
使用机制:
⑴定义一个回调函数;
⑵提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者;
⑶当特定的事件或条件发生的时候,调用者使用函数指针调用回调函数对事件进行处理。
以上是百科的讲解
接下来,我们从例子简单去认识一下
(1)假如,当你与一个朋友出去玩的时候,离别时,跟她说,到家了给我发个信息,那么,这就是一种回调函数形式:
回家的动作是主函数,留了一个函数参数(回到家发信息),主函数执行好了(回到家之后),回调函数(发信息),最后你收到一条信息,整个过程结束。
(2)又比如,函数 F1 调用函数 F2 的时候,函数 F1 通过参数给 函数 F2 传递了另外一个函数 F3 的指针,在函数 F2 执行的过程中,函数F2 调用了函数 F3,这个动作就叫做回调(Callback),而先被当做指针传入、后面又被回调的函数 F3 就是回调函数
回调函数与普通函数的最大不同(或者说优点):解耦
在主程序中我们可以把回调函数像参数一样传入库函数(或者其他函数),我们只要改变传进库函数的参数,就可以实现不同的功能。
也就是说,使用回调函数可以降低耦合度
#include<stdio.h>
#include<iostream>
using namespace std;
int Callback_1() // Callback Function 1
{
printf("Hello, this is Callback_1 \n");
return 0;
}
int Callback_2() // Callback Function 2
{
printf("Hello, this is Callback_2 \n");
return 0;
}
int Handle(int (*Callback)())
{
printf("Entering Handle Function.\n");
Callback();
printf("Leaving Handle Function. \n");
}
int main()
{
printf("Entering Main Function. \n");
Handle(Callback_1);
Handle(Callback_2);
printf("Leaving Main Function. \n");
return 0;
}