这是个目录,虽然用不到目录
文章目录
一、什么是回调函数?
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是直接调用该函数,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
我对此的理解是调用者需要在这里调用一个函数,但是我不在这直接调用这个函数,可能是我没有想好在这写什么或者不想在这写,所以我就在留下了一个指针函数,我想起来该在这里写什么的时候我只需要新建一个函数,然后把这个函数的地址通过注册函数传递给调用者的指针变量中,然后调用者就可以调用这个函数了,这个函数就称为回调函数。
二、使用回调函数的好处
回调函数可以把调用者与被调用者分开,所以调用者不关心谁是被调用者。它只需知道存在一个具有特定原型和限制条件的被调用函数。简而言之,回调函数就是允许用户把需要调用的函数的指针作为参数传递给一个函数,以便该函数在处理相似事件的时候可以灵活的使用不同的方法。回调函数的使用可以大大提升编程的效率,这使得它在现代编程中被非常多地使用。同时,有一些需求必须要使用回调函数来实现。
三、书写格式
回调函数书写格式
1.先定义一个回调函数。
2.提供注册函数,将回调函数的函数指针注册给调用者。
3.当特定事件或者条件发生时,调用者使用函数指针调用回调函数对事件进行处理。
四、代码实现
1.首先使用typedef声明回调函数的指针类型,返回值类型、参数类型
格式:typedef void (*CallBackFun)() 即:返回值(指针名)(参数列表)
代码如下(示例):
typedef void (*CallBackFun)(uint8_t); //为回调函数命名,类型命名为CallBackFun,参数为uint8_t s
CallBackFun KEY_Callback_CBS;//创建实例
2.编写回调函数的注册函数
代码如下(示例):
int register_callback(CallBackFun P)//注册回调函数
{
KEY_Callback_CBS= P;
return 0;
}
3. 调用者调用函数
代码如下(示例):
void Get_Key()
{
if(!key)
{
delay_ms(10);
if (!key)
{
KEY_Callback_CBS( NULL);
while(!key);
}
}
}
4.书写回调函数并注册
代码如下(示例):
void Key_Handle(uint8_t s)
{
/*书写自己想写的东西*/
/*_gpio_toggle_level(GPIO_PORTC, 1<<5);*/
/*io_write(io, T_buf, 11);*/
}
int main()
{
register_callback(Key_Handle);//注册回调函数
while()
{
Get_Key();
}
}
总结
以上就是今天要讲的内容,本文仅仅简单介绍了回调函数的使用,回调函数的使用可以大大提升编程的效率,这使得它在现代编程中被非常多地使用。
个人见解,仅供参考,如有错误希望诸位能够不吝赐教