回调函数的小例子(叫醒服务场景)

还是抄知乎的例子来说吧:客人们去住店,旅店提供叫醒服务,不过叫醒方式可以由客人们自己要求,有要求大声喊醒的,有要敲锣打鼓的,有要求浇冷水的……,这个叫醒服务的方式就是回调函数。

先来搞个函数签名文件: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

运行结果如下:

转载于:https://my.oschina.net/zwyang/blog/1610013

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值