首先:回调函数和钩子函数不是对立的。 1、回调函数 所谓回调函数,一般就是把函数的地址作为参数传进去,让调用的函数在内部可以调用这个函数,调用完后返回,强调调用和返回,是一种灵活的指向。 例子:定义函数指针 typedef int (*Fun)(int, int); int add(int a, int b){...}; int sub(int a, int b){...}; void cal(int a, int b, Fun p){...}; 当我们调用cal(x, y, add)或者cal(x, y, sub),目的是计算结果。 2、钩子函数 钩子函数,严格算起来,也算是回调函数的一种,是一种过程监控,是回调函数的一种应用形式。钩子函数主要是针对的过程截取的,当你使用了钩子之后,执行某个过程,如上电启动bootload,那么系统会把bootload当做一个过程,对应的预留一定会执行的bootloader_before_init和bootloader_after_init作为钩子函数,开发人员可以在bootload_before或者after中带入你想要的功能函数(如上面写的计算),当然也可以不带入任何函数。 即原本是:系统-->目标函数 使用钩子就变成:系统-->你写的回调函数-->目标函数
再举个例子例如:在RTOS里面的钩子函数
- 钩子函数有要求,
①允许应用程序设计人员添加后台功能没有单独任务的开销
②在任何情况下都不能,调用可能阻塞的函数,必须快进快出 - 回调函数
在按键注册机制里面,按键按下以后,我们都是调用的是回调函数。这个时候是处理按键的函数,这个是目的了。
结论:钩子函数是特殊的回调函数(运用了回调的思想),但回调不一定就是钩子函数。
因此,钩子函数和回调函数的区别在于它们被调用的时机和方式。钩子函数是由系统自动调用,而回调函数是更多强调程序员显式调用。
标签:...,调用,函数,int,钩子,回调 From: https://blog.csdn.net/lityl5/article/details/142894958