C零碎语法
目录
文章目录
流程
1.声明一个函数指针
uint8_t (*p_CallbackFunc)(void);
2.定义回调函数
重要的是要注意回调函数只是一个函数。 由于它的使用方式(通过函数指针访问),我们将其称为回调。
uint8_t Handler_Event(void)
{
/* code of the function */
}
3.注册回调函数
这是为函数指针分配地址的操作。
static CallbackFunc_t HandlerCompleted;
/*用来注册回调函数的功能函数*/
void CallbackRegister (CallbackFunc_t callback_func)
{
HandlerCompleted = callback_func;
}
/* 注册Handler_Event作为回调*/
CallbackRegister(Handler_Event);
应用
4.事件回调
#include <stdio.h>
// 定义回调函数类型
typedef void (*EventCallback)(const char*);
// 事件处理结构体
typedef struct {
EventCallback callback; // 回调函数指针
const char* eventName; // 事件名称
} EventHandler;
// 注册回调函数
void registerCallback(EventHandler* handler, EventCallback callback, const char* eventName) {
handler->callback = callback;
handler->eventName = eventName;
}
// 模拟事件触发
void triggerEvent(EventHandler* handler) {
printf("Event '%s' has been triggered!\n", handler->eventName);
handler->callback(handler->eventName);
}
// 回调函数示例
void onEvent(const char* eventName) {
printf("Callback function is called for event: %s\n", eventName);
}
int main() {
// 创建事件处理器实例
EventHandler eventHandler;
// 注册回调函数到事件处理器
registerCallback(&eventHandler, onEvent, "SampleEvent");
// 触发事件
triggerEvent(&eventHandler);
return 0;
}
- 我们定义了一个
EventCallback
类型,它是一个函数指针类型,指向一个接受const char*
参数并返回void
的函数。 EventHandler
结构体包含一个回调函数指针callback
和一个指向事件名称的指针eventName
。registerCallback
函数用于注册一个回调函数到EventHandler
结构体中。triggerEvent
函数模拟了一个事件的触发,它打印一条消息并调用注册的回调函数。onEvent
是一个回调函数示例,它简单地打印出事件名称。- 在
main
函数中,我们创建了一个EventHandler
实例,注册了onEvent
作为回调函数,并触发了事件。
当运行这个程序时,它将输出:
Event 'SampleEvent' has been triggered!
Callback function is called for event: SampleEvent