首页 手机数码内容详情

钩子函数和回调函数(c语言钩子函数和回调函数区别)

2022-10-09 196 zzx
钩子函数和回调函数(c语言钩子函数和回调函数区别)

站点名称:钩子函数和回调函数(c语言钩子函数和回调函数区别)

所属分类:手机数码

相关标签: # 函数

官方网址:

SEO查询: 爱站网 站长工具

进入网站

站点介绍

前言本文主要介绍的是C语言回调函数与钩子函数的概念,如果你想要从事C/C++ 行业,对于回调函数与钩子函数肯定会接触的,很多封装的API中都存在这样的函数设计。希望对于超多访客学习C/C++有一些小小的帮助。

概念理解什么是回调函数?什么又是钩子函数?目前对于这两个概念的定义可能难以理解,在编程的过程中也是有点难区别,因为他们本质上都是属于函数,只是说是函数的一种应用的形式不同罢了。

不管是钩子函数还是回调函数为了保持程序的灵活性,大部分都会选用函数指针的方式进行设计,所以一般小伙伴都直接认为是函数指针的一种应用,如果从语法的角度来看,确实是这么回事,可是咱们需要换一个角度去看待一个事物,就像咱们之前谈面向对象编程,如果你用面向过程的思维方式去理解面向对象的设计是难以理解的,所以这里的两个概念也是一样的。

回调函数 应该很多小伙伴在编程中或者浏览别人的代码的时候都会看到callback的字样,是的,回调函数的英文就是callback Fuction,从字面上来理解 : 反过来调用的函数,那咱们就需要知道它本来要去哪里,它又返回到什么地方执行,请看以下案例:

其实从形式上看来确实没有什么特其他就是函数指针的应用,不过咱们换一个角度,用分层的设计角度再对回调函数进行理解,把Cal函数认为是底层函数(也完全可以说是库函数),把main看成是上层应用函数,而add和sub认为是上层的方法,现在main要让底层Cal去进行计算了,而咱们的Cal函数再执行过程中发现不知道用什么方法进行计算,于是他又打道回府去拿到计算的方法,然后获得最后的结果返回给main,那么这里的Sub和Add都认为是回调函数。

钩子函数 一看到钩子(Hook)我们第一个步想到的动作就是挂钩,作者这里举个例子:今天要吃鱼,去河边钓鱼,于是咱们准备好钓鱼竿,终于有鱼上钩了,一看原来是条小鱼,于是便放了,继续钓鱼,接着钓了条大鱼,于是收工回去吃大餐。

所以钩子函数看来就相当于一个监测器,在消息传递的过程中,捕获自己感兴趣的内容,然后去处理,钩子函数这个概念在消息机制中经常会提到的,它也是一个函数,一般是通过函数指针进行灵活的注册,这样一说,完了,分不清楚了,首先咱们还是要选择好角度,不确定角度真的说不清。

各位可能会看到钩子函数也是客户定义的,是不是也完全可以理解为一个回调函数呢?形式上确实可以认为钩子函数也是一种回调函数,不过这样没有什么意义,我还可以说他们都是函数呢?还是要从函数的功能上区分,回调函数更多的是目的处理,而钩子函数更多的是过程监控,对于钩子函数的应用在rt-thread或者FreeRtos中都使用得非常多。

RT-Thread中截取的钩子函数代码参考:

RT-Thread通过一个宏定义来让客户决定是否开启钩子函数功能,上面每次进入中断都会调用对应的钩子函数,具体钩子函数根据自身要求进行设计,比如统计或者监控等等功能。

尾言文章都是手打原创,每天最浅显的介绍C语言、C++,windows知识,喜欢我的文章就关注一波吧,每天带你学习C/C++不同的知识,也完全可以看到最新更新和之前发表的文章哦。如果足下基本比较差,不妨关注下每一个人都可以学习的视频教程