回调函数和钩子函数 钩子函数和回调函数

前言本文主要介绍的是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++不同的知识 。也完全可以看到最新更新和之前发表的文章哦 。如果足下基本比较差 。不妨关注下每一个人都可以学习的视频教程