C语言 - 回调函数

在C语言中,回调函数(Callback Function)是一种非常重要的编程技术。回调函数是指一个通过函数指针调用的函数。简单来说,如果你将一个函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。

在C语言中,回调函数(Callback Function) 是通过函数指针调用的函数,通常作为参数传递给另一个函数(称为"高阶函数")。当特定事件或条件发生时,高阶函数会调用这个回调函数。这种机制常用于实现事件处理、异步操作和自定义行为。

回调函数的原理

  1. 函数指针:C语言中函数指针存储函数的地址,通过指针可以调用函数。

  2. 传递函数:将函数指针作为参数传递给另一个函数。

  3. 条件触发:高阶函数在特定条件下调用传递进来的回调函数。


使用回调函数的步骤(附示例)

1. 定义函数指针类型(可选但推荐)

typedef void (*Callback)(int);  // 定义函数指针类型:接受int参数,无返回值

2. 实现回调函数

void OnEventA(int data) {
    printf("事件A触发,数据: %d\n", data);
}

void OnEventB(int data) {
    printf("事件B触发,数据: %d\n", data);
}

3. 创建接收回调的高阶函数

void EventHandler(const char* eventName, Callback callback, int data) {
    printf("检测到事件 [%s]\n", eventName);
    callback(data);  // 触发回调函数
}

4. 主函数中使用回调

int main() {
    // 将回调函数作为参数传递
    EventHandler("网络响应", OnEventA, 100);
    EventHandler("按键按下", OnEventB, 200);
    return 0;
}

实际应用场景

  1. 事件驱动系统(如GUI库中的按钮点击)

  2. 异步操作(如网络请求完成后的通知)

  3. 算法定制化(如qsort的比较函数)

完整代码示例

#include <stdio.h>

// 1. 定义回调函数类型
typedef void (*EventCallback)(int);

// 2. 回调函数实现
void TemperatureAlert(int temp) {
    if(temp > 30) 
        printf("警告!温度过高: %d°C\n", temp);
}

void HumidityAlert(int humidity) {
    if(humidity > 80)
        printf("警告!湿度过高: %d%%\n", humidity);
}

// 3. 高阶函数(事件处理器)
void SensorMonitor(int value, EventCallback callback) {
    printf("传感器数据更新: %d\n", value);
    callback(value);  // 触发回调
}

int main() {
    // 模拟传感器数据
    int temp = 35, humidity = 85;
    
    // 注册回调函数
    SensorMonitor(temp, TemperatureAlert);
    SensorMonitor(humidity, HumidityAlert);
    
    return 0;
}

输出:

传感器数据更新: 35
警告!温度过高: 35°C
传感器数据更新: 85
警告!湿度过高: 85%

关键点总结

概念 说明
函数指针 typedef 返回值类型 (*类型名)(参数列表);
回调注册 将函数指针作为参数传递给高阶函数
触发时机 由高阶函数决定何时调用回调(如事件发生、数据到达等)
优势 解耦代码、增强扩展性、支持异步处理
经典应用 C标准库的qsort()、线程库的pthread_create()

通过回调函数,您可以将具体操作逻辑事件触发机制分离,极大提高代码的模块化和复用性。

 

posted @ 2025-05-29 14:25  [BORUTO]  阅读(162)  评论(0)    收藏  举报