C 回调函数

C 回调函数是什么?

在 C 语言中,回调函数指的是通过 “函数指针” 的方式,来将一个 “函数” 作为参数传递给另一个函数,然后再调用函数时执行传入的函数。

示例:回调函数的基本用法

#include <stdio.h>

typedef void (*callback_t)(void *arg);

// 定义 fn1
void fn1(callback_t callback, void *arg) 
{
    printf("执行 fn1\n");
    // 执行回调函数 fn2
    callback(arg);
}

// 定义 fn2
void fn2(void *arg) 
{
    printf("执行 fn2:%s\n", (char *)arg);
}

int main(void)
{
    // 执行 fn1
    fn1(fn2, "绿叶网");
    return 0;
}

运行结果如下。

执行 fn1
执行 fn2:绿叶网

分析:

在这个例子中,我们定义了 2 个函数 fn1() 和 fn2(),并且展示了如何使用 C 语言中的回调函数。

typedef void (*callback_t)(void *arg);

上面这句代码表示使用 typedef 关键字定义了一个 callback_t 的类型别名。该类型别名指向一个函数,该函数的返回值类型为 void,该函数的参数类型为 void*。

void fn1(callback_t callback, void *arg) 
{
    printf("执行 fn1\n");
    // 执行回调函数 fn2
    callback(arg);
}

上面这段代码用于定义一个名为 fn1 的函数,该函数接收以下 2 个参数。

  • callback:类型为 callback_t,指向一个回调函数。
  • arg:类型为 void*,可以指向任何类型的数据。

在 fn1() 函数的内部,我们执行了回调函数 fn2()。也就是说,只要 fn1() 函数被调用了,它内部代码就会被执行,然后就会执行回调函数 callback(arg);。

注意: 回调函数的参数类型和返回值类型,必须与调用函数的定义一致。

C 回调函数的应用场景

在 C 语言中,回调函数主要用于以下 4 种场景。

  • 异步编程:比如在网络编程中,当数据接收完成时,可以通过回调函数来处理接收到的数据。
  • 事件处理:比如在操作系统中,可以使用回调函数处理中断、信号等事件。
  • 线程池:比如在线程池中,可以使用回调函数指定线程要执行的任务。
  • GUI 编程:比如在 GUI 编程中,可以使用回调函数来处理鼠标单击、鼠标移动、键盘输入等事件。

C 回调函数的优缺点

在 C 语言中,回调函数有以下的优点。

  • 回调函数可以使代码更加模块化,并更具可维护性。
  • 回调函数可以使代码更加灵活,并更具可扩展性。

同时,回调函数也有以下缺点。

  • 回调函数可能导致代码难以理解和调试,降低代码可读性。
  • 回调函数可能导致内存泄漏,有一定安全性问题。

上一篇: C 指针函数

下一篇: C 结构体

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号