还是抄知乎的例子来说吧:客人们去住店,旅店提供叫醒服务,不过叫醒方式可以由客人们自己要求,有要求大声喊醒的,有要敲锣打鼓的,有要求浇冷水的……,这个叫醒服务的方式就是回调函数。
先来搞个函数签名文件:check_in.h
#include//住店的时候要求注册一个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
运行结果如下: