还是抄知乎的例子来说吧:客人们去住店,旅店提供叫醒服务,不过叫醒方式可以由客人们自己要求,有要求大声喊醒的,有要敲锣打鼓的,有要求浇冷水的……,这个叫醒服务的方式就是回调函数。
先来搞个函数签名文件:check_in.h
#include <stdio.h>
//住店的时候要求注册一个wake函数
void check_in(char* geust,void(*wake)(char*));
旅店实现check_in方法:
#include "check_in.h"
void check_in(char* name,void(*wake)(char*)
{
printf("有人住店了,客人姓名是:%s\n",name);
printf("过了一段时间,该叫醒他了\n");
wake(name);
}
旅店部分的工作已经做完了,我们来编译成一个动态链接库,gcc check_in.c -fPIC -shared -o check_in.so。
-------------------------------------------------------------------------------------------------------------
客人住店来了,他们要自己去实现wake方法。我们把这个测试文件就叫做guest.c吧:
#include "check_in.h"
void wake1(char* name)
{
printf("%s要求大喊:SB,起来了!\n",name);
}
void wake2(char* name)
{
printf("%s要求:直接在头上来一盆冷水!\n",name);
}
int main()
{
//张三来住店 要求大喊这种叫醒服务
char* name1 = "张三";
check_in(name1,wake1);
//李四来住店 要求泼冷水这种叫醒服务
char* name2 = "李四";
check_in(name2,wake2);
return 0;
}
编译一下:gcc guest.c -L. check_in.so -o check
运行结果如下: