一 什么是回调函数?
简而言之,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。
回调函数示例:void func(void (*f)(void *), void *p);
二 回调函数实例
/* para_callback.h */ #ifndef PARA_CALLBACK_H #define PARA_CALLBACK_H typedef void (*callback_t)(void *); extern void repeat_three_times(callback_t, void *); #endif
/* para_callback.c */ #include "para_callback.h" void repeat_three_times(callback_t f, void *para) { f(para); f(para); f(para); }
/* main.c */ #include <stdio.h> #include "para_callback.h" void say_hello(void *str) { printf("Hello %s\n", (const char *)str); } void count_numbers(void *num) { int i; for(i=1; i<=(int)num; i++) printf("%d ", i); putchar('\n'); } int main(void) { repeat_three_times(say_hello, "Guys"); repeat_three_times(count_numbers, (void *)4); return 0; }
以上repeat_three_times();为回调函数,在主函数中第一个将say_hello函数及其需要的参数传递给回调函数,第二个将cout_numbers函数作为指针传递给repeat_three_times()函数。回调函数必须遵守事先规定好的参数格式和传递方式,
三 回调函数的作用
回调函数一般提供一个框架给程序员,程序员在适当时候回调用户定义的函数,具体情况具体处理,即使用户定义的函数出错,也与回调框架无关,当特定的事件或条件发生的时候,调用者使用函数指针调用回调函数对事件进行处理。