如果参数是一个函数指针,调用者可以传递一个函数的地址给实现者,让实现者去调用它,这称为回调函数(Callback Function)。
回调机制包括两部分:服务执行者和服务方式制定者。
1. 服务执行者先制定服务规范;
2.服务方式制定者然后按照规范制定服务方式;
3.然后执行者按照这个方式提供服务。
回调函数的方式是把函数指针的作为参数传递进去,所以规范就是约定函数的参数类型,个数。
所以函数不需要知道外部函数名,就可用实现外部函数的调用,直接调用参数定义的函数类型,即执行传入的外部函数地址函数
以下是一个简单的例子。实现了一个repeat_three_times函数,可以把调用者传来的任何回调函数连续执行三次。
/* callback.h */
#ifndef CALLBACK_H
#define CALLBACK_H
typedef void (*callback_t)(void *);
extern void repeat_three_times(callback_t, void *);
#endif
/* callback.c */
#include "callback.h"
void repeat_three_times(callback_t f, void *para)
{
f(para); //形参执行的是外部某功能的函数
f(para);
f(para);
}
/* main.c */
#include <stdio.h>
#include "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')