回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。这一设计允许了底层代码调用在高层定义的子程序。回调的形式因程序设计语言的不同而不同。(C, C++ and Pascal允许将函数指针作为参数传递给其它函数。其它语言,例如JavaScript,Python,Perl和PHP,允许简单的将函数名作为参数传递。Objective-C中允许利用@selector关键字传递SEL类型的函数名。)
回调允许函数调用者在运行时调整原始函数的行为。因为可以把调用者与被调用者分开,所以调用者不关心谁是被调用者。它只需知道存在一个具有特定原型和限制条件的被调用函数。
例子:
#include <stdio.h>
void printWelcome(int len) // 被调用者
{
printf("欢迎欢迎 -- %d/n", len);
}
void printGoodbye(int len) // 被调用者
{
printf("送客送客 -- %d/n", len);
}
void callback(int times, void (* print)(int)) // 回调函数,传入被调者函数指针(地址),然后回调函数对被调用函数进行操作
int i;
for (i = 0; i < times; ++i) //具体实现方法
{
print(i); //被调用者
}
printf("/n我不知道你是迎客还是送客!/n/n");
}
void main(void)
{
callback(10, printWelcome);//调用者调用回调函数
callback(10, printGoodbye);
printWelcome(5);
}