callback function in c example

网上查到的很好的解释:

回调函数是指使用者自己定义一个函数,实现这个函数的程序内容,然后把这个函数(入口地址)作为参数传入别人(或系统)的函数中,由别人(或系统)的函数在运行时来调用的函数。函数是你实现的,但由别人(或系统)的函数在运行时通过参数传递的方式调用,这就是所谓的回调函数。简单来说,就是由别人的函数运行期间来回调你实现的函数。

至少在应用之间异步消息传递、驱动层与应用层之间的通信上有奇效。代码中很多模块的实现都使用回调做法(代码写得还真绕,看了好一会😅),后来在添加Uart/IR工厂自动化测试,单键通过按键面板实现7键功能上也参考了。
思路是先实现回调函数功能,然后把回调函数赋给一个函数指针(注册回调函数),最后使用这个函数指针即可。例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>

typedef int (*callbackFunc) (int a, int b);
callbackFunc pCallbackFunc = NULL;

int add(int a,int b)
{
return a + b;
}

void registerCallbackFunc()
{
pCallbackFunc = &add;
//pCallbackFunc = add; //ok
}

void main()
{
int a = 3;
int b = 5;
int c = 0;
registerCallbackFunc();
c = (*pCallbackFunc)(a,b);
//c = pCallbackFunc(a,b); //ok
printf("c = %d\n",c);
}

参考

  1. Callbacks in C
  2. What is a “callback” in C and how are they implemented?
  3. 一文搞懂C语言回调函数