技术积累 — 回调函数的好处和使用技巧

一、前言

回调函数是一种去耦合的技巧。

从语法的角度来看,callback好像平凡无奇,甚至有点多此一举。但从软件架构的角度来看,这种技术就十分有意义,我觉得理解callback这么一种技术不能单纯从语法的角度理解,要站得高一点才能看清它的价值。

比如学习c语言,初学者是线性的思维,main函数从头到尾跑完,看代码也很简单,从头到尾看一遍就行。加上了callback之后,软件运行时的顺序就有点复杂了,这种复杂是设计出来的,是为了带来更多结构上的好处。

二、场景举例

1. 原始接口:

//其他模块或其他层的接口如下:
	void BT_Link_cb(tMY_Struct *para);

2. 使用方法:

1、定义函数指针:typedef
	typedef void (* My_callback)(tMY_Struct *para);

2、声明函数指针,它可以代替函数;
	My_callback s_my_callback = NULL;

3、可以使用函数指针替换函数,但此时函数指针是没有实现、没有意义的;

4、声明callback注册函数;
	void App_Register_My_CB(My_callback callback);

	void App_Register_My_CB(My_callback callback)
    {
	    if(callback != NULL) {
			s_my_callback = callback;
	    }
    }

5、给callback赋值,BT_Link_cb是其他模块或其他层的接口;
	App_Register_My_CB(BT_Link_cb);

6、使用时:
	if(s_my_callback != NULL) {
		s_my_callback(local_para); //传递当前的数据
	}

3. 好处:

1、可以用于跨层与跨模块的数据传递;
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文化人Sugar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值