编程中前缀“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
相关产品推荐
相关产品推荐

