回调函数示例

// 定义回调函数类型
typedef void (*CallbackFunction)(void);
// 存储回调函数指针的变量
CallbackFunction callback;
// 注册回调函数
void register_callback(CallbackFunction func) {
    callback = func;
}
// 模拟事件触发,调用回调函数
void event_occurred() {
    if (callback!= NULL) {
        callback();
    }
}
// 回调函数定义
void my_callback() {
    printf("回调函数被调用\n");
}
int main() {
    register_callback(my_callback);
    event_occurred();
    return 0;
}
  1. 定义回调函数类型和相关变量
    • typedef void (*CallbackFunction)(void);:这行代码定义了一个新的函数指针类型 CallbackFunction。这种类型的指针指向的函数没有参数且返回值为 void。这就像是为回调函数设定了一个“模板”,所有符合这个模板的函数都可以作为回调函数使用。
    • CallbackFunction callback;:声明了一个 CallbackFunction 类型的变量 callback,这个变量用于存储我们注册的回调函数的地址。目前它还没有指向任何具体的函数。
  2. 实现注册回调函数的功能
    • void register_callback(CallbackFunction func):定义了一个名为 register_callback 的函数,它接受一个 CallbackFunction 类型的参数 func,也就是一个符合前面定义的回调函数模板的函数指针。
    • callback = func;:在 register_callback 函数内部,将传入的回调函数指针 func 赋值给全局变量 callback。这样,callback 就记住了我们想要注册的回调函数的地址,完成了回调函数的注册过程。
  3. 模拟事件触发并调用回调函数
    • void event_occurred():定义了一个函数 event_occurred,用于模拟某个事件的发生。
    • if (callback!= NULL):在 event_occurred 函数内部,首先检查 callback 是否为空。如果 callback 为空,说明还没有注册任何回调函数,就不执行任何操作。
    • callback();:如果 callback 不为空,即已经注册了回调函数,就通过函数指针 callback 调用对应的回调函数。这就相当于当事件发生时,执行我们预先注册好的回调函数的逻辑。
  4. 定义具体的回调函数并进行注册和触发
    • void my_callback():定义了一个具体的回调函数 my_callback,它符合 CallbackFunction 类型的要求(无参数,返回值为 void)。在这个函数内部,只是简单地打印一条消息 回调函数被调用
    • main 函数中:
      • register_callback(my_callback);:调用 register_callback 函数,将 my_callback 函数的地址作为参数传入,完成回调函数的注册。此时,callback 变量就指向了 my_callback 函数。
      • event_occurred();:调用 event_occurred 函数,模拟事件发生。由于之前已经注册了 my_callback 函数,event_occurred 函数会调用 my_callback,从而在控制台输出 回调函数被调用

通过以上步骤,完整地展示了在C语言中注册回调函数以及触发调用回调函数的过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值