c语言回调函数简单的说明

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


回调函数

一、回调函数是什么,原理?

回调函数的使用本质上就是函数指针的使用。
下面简单的举例

int Function_Add(int a,int b)//一个加法函数
{
   return (a+b);
}
int Function_Multiply(int a,int b)//一个乘法函数
{
   return (a*b);
}

再定义一个函数,函数的形参是函数指针int(*function_ptr)(int a,int b)。

int Program(int(*function_ptr)(int a,int b),int para1,int para2)
{
   return funtion_ptr(para1,para2);
}

这样就可以通过Program函数调用Function_Add函数和Function_Multiply函数了,这里Function_Add和Function_Multiply就被称作回调函数

Program(Function_Add,3,5);
Program(Function_Multiply,3,5);

二、为什么要用回调函数

模块化设计、方便理解和分工合作,一方可以只编写类似Function_Add这样的回调函数,另一方则无须在意回调函数的具体实现,只要会调用回调函数就行了。而且添加新的类似的功能也比较方便,只需要再写一个新的回调函数就可以了。
就像流水线上一样,一部分人只负责制造零件(回调函数)就行,另一部分人只负责把零件组装起来(调用回调函数)。

三、回调函数的应用

通过typedef重命名函数指针
例如可以这样重命名typedef int(*FuncPtr_T)(int a,int b)
typedef 的用法是 typedef 原类型 别名
这里可以把int(*)(int a,int b)理解成原类型,FuncPtr_T理解成别名
这样在定义多个函数指针时比较方便。
Program函数就可以像下面一样写了

int Program(FuncPtr_T function_ptr,int para1,int para2)
{
   return funtion_ptr(para1,para2);
}

定义多个函数指针一般使用结构体
可以这样用

typedef struct
{
 FuncPtr  fun_add;
 FuncPtr  fun_multiply; 
 FuncPtr  fun_sum;
}S_CallBack_T;
S_CallBack_T CallBack ={Function_Add,Function_Multiply,Function_Sum};

也可用数组

FuncPtr_T CallBack_Buffer[] ={Function_Add,Function_Multiply,Function_Sum};

剩下的无非就是对结构体和数组的使用了。例如在Rtos和stm的HAL库中就有很多类似的使用。

总结

以上就是对回调函数的简单说明,笔者对函数指针的理解并不深刻,如有错误欢迎指出,基础薄弱的码友可以去看看大佬们写的有关函数指针和回调函数的文章。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值