当函数指针(函数名)做为函数的参数,传递给一个被调用函数,被调用函数就可以通过这个指针调用外部的函数,这就形成了回调。
回调函数:利用函数指针做函数参数,实现的一种调用机制,具体任务的实现者,可以不知道什么时候被调用。
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include<stdio.h>
#include <string.h>
//子任务的实现者
int add(int a,int b)
{
printf("func add() do ....\n");
return a + b;
}
//子任务的实现者
int add1(int a,int b)
{
printf("func add1() do ....\n");
return a + b;
}
//子任务的实现者
int add2(int a,int b)
{
printf("func add2() do ....\n");
return a + b;
}
//子任务的实现者
int add3(int a,int b)
{
printf("func add3() do ....\n");
return a + b;
}
//定义一个类型
typedef int (*myTypeFunc)(int a,int b);
//框架
int mainOp(myTypeFunc func)
{
func(5,6);
return 0;
}
//框架
int mainOp2(int (*myTypeFunc)(int a,int b) )
{
myTypeFunc(5,6);
return 0;
}
//任务的调用者
int main()
{
//myTypeFunc myfunc;
//myfunc = add;
//myfunc(1,2);
mainOp(add);
mainOp2(add);
mainOp2(add1);
mainOp2(add2);
mainOp2(add3);
system("pause");
return 0;
}
回调函数的本质:提前做了一个协议的约定(把函数的参数、函数返回值提前约定)
请思考:C编译器通过哪个具体的语法,实现解耦合的?
C++编译器通过多态的机制(提前布局vptr指针和虚函数表,找虚函数入口地址来实现)
回调机制原理:当具体事件发生时,调用者通过函数指针调用具体函数。回调机制的将调用者和被调函数分开,两者互不依赖,任务的实现和任务的调用可以耦合 (提前进
行接口的封装和设计)