You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编程中前缀“on”的含义?C语言on_something()类函数命名解析

关于C语言中on_前缀函数的含义

这个问题问得很好!在C语言(尤其是事件驱动、嵌入式或者GUI开发场景里),on_前缀的函数其实是一种很常见的命名约定,主要用来标识回调函数/事件处理函数——简单来说,就是当某个特定事件发生时,会被系统/框架自动调用的函数,而不是由你主动在代码里直接调用。

常见的使用场景

  • 事件驱动编程中的回调:比如GUI框架(像GTK)、嵌入式系统的外设中断、网络事件处理等场景。比如on_button_click()就是按钮被点击时触发的处理函数,on_uart_data_received()是串口收到数据时的响应函数。
  • 观察者模式的响应函数:当某个对象的状态发生变化时,通知注册的观察者函数,这类函数常以on_开头,比如on_temperature_change()当温度传感器数值更新时执行。
  • 钩子(Hook)函数:用来扩展或拦截某个核心流程,比如on_before_file_save()在文件保存前做校验或日志记录,on_after_init()在系统初始化完成后执行自定义逻辑。

简单示例代码

这里用一个模拟的嵌入式按键处理场景来展示:

// 定义按键回调函数的类型
typedef void (*KeyEventHandler)(int key_code);

// 全局存储注册的按键处理函数
static KeyEventHandler g_key_handler = NULL;

// 注册按键事件的处理函数
void register_key_event_handler(KeyEventHandler handler) {
    g_key_handler = handler;
}

// 硬件中断触发时的底层函数,会调用注册的处理函数
void key_interrupt_triggered(int key_code) {
    if (g_key_handler != NULL) {
        g_key_handler(key_code); // 调用on_前缀的处理函数
    }
}

// 具体的按键事件处理函数,用on_前缀明确其用途
void on_key_pressed(int key_code) {
    printf("Key %d was pressed!\n", key_code);
    // 这里可以添加具体的业务逻辑,比如控制LED、发送指令等
}

int main() {
    // 注册按键处理函数
    register_key_event_handler(on_key_pressed);
    
    // 模拟按键中断触发(实际场景中由硬件触发)
    key_interrupt_triggered(1);
    
    return 0;
}

相关资料推荐

  • 《C语言接口与实现:创建可重用软件的技术》:这本书里详细讲解了如何设计可重用的C语言组件,其中回调函数的设计和命名规范是重点内容之一,能帮你理解这类命名背后的设计思想。
  • 《嵌入式系统设计与实践》:不少嵌入式系统的代码中大量使用on_前缀的事件处理函数,这本书结合实际项目场景,能让你更直观地看到这类函数的应用。
  • 开源项目参考:比如GTK框架、Linux内核的部分驱动模块,里面有很多on_前缀的函数实例,可以通过阅读源码学习具体的使用方式。

内容的提问来源于stack exchange,提问作者bijian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:37:20