/*********************************************************************/
//调用者要先写好这个回调函数的实例。才能调用 回调函数。回调函数相当于制定规则的,但具体函数体,函数名,函数实现不细化,具体细则还得调用者自己实现(即回调函数的实现)。
int call(CallBackFun pCallBack, char *p) //写法1,
{ // 执行回调函数,方式一:通过命名方式
printf("call 直接打印出字符%s!\n", p);
pCallBack(p);//指针函数要写在里面,不用它,回调个屁啊!!!
return 0;
}
/*********************************************************************/
int call2(char *p, int (*ptr)())
{ // 执行回调函数,方式二:直接通过方法指针
printf("==============\n", p);
(*ptr)(p); //指针函数要写在里面,不用它,回调个屁啊!!!
}
/*********************************************************************/
int call3(char *p, CallBackFun pCallBack)
{ // 执行回调函数,方式一:通过命名方式
printf("--------------\n", p);
pCallBack(p); //指针函数要写在里面,不用它,回调个屁啊!!!
}
/*********************************************************************/
int main()
{
char *p = "hello";
call(Afun, p); //调用Afun回调函数,传递参数*P给Afun函数
call(Cfun, p); //调用Cfun回调函数,传递参数*P给Afun函数
call2(p, Afun); //调用Afun回调函数,传递参数*P给Afun函数
call2(p, Cfun); //调用Cfun回调函数,传递参数*P给Afun函数
call3(p, Afun); //调用Afun回调函数,传递参数*P给Afun函数
call3(p, Cfun); //调用Cfun回调函数,传递参数*P给Afun函数
// int i = getchar();
// printf("Input: %c \n", i);
return 0;
}
/*********************************************************************/
Linux下的编译、输出:
[jhliu@localhost src]$ gcc -o func_callback func_callback.c
[jhliu@localhost src]$ ./func_callback
call 直接打印出字符hello!
Afun 回调打印出字符hello!
==============
call 直接打印出字符hello!
Cfun 回调打印:hello, Nice to meet you!
==============
Afun 回调打印出字符hello!
==============
Cfun 回调打印:hello, Nice to meet you!
--------------
Afun 回调打印出字符hello!
--------------
Cfun 回调打印:hello, Nice to meet you!
[jhliu@localhost src]$
/*****************下面是少占鱼测试通过的用法举例(vc6.0)***********************************/
#include "iostream.h"
#define uint8 unsigned int
typedef void (*halCBack_t) (uint8 keys, uint8 state); //指针函数,注意加了自定义typedef后,下面才能重命名
void KeyCallback ( uint8 keys, uint8 state ); //具体实现函数
void LEDCallback ( uint8 keys, uint8 state ); //具体实现函数
int Ligback( uint8 keys, uint8 state ); //具体实现函数
void HalKeyConfig (uint8 st, halCBack_t cback);//注意指针函数加了typedef后,这里才能当关键字声明
void ShiYong (uint8 ffff, int (*halCBack_t) (uint8 keys, uint8 state));//如果指针函数没有typedef,要这样使用
//注意指针函数加了自定义typedef后,这里才能定义,否则报错
halCBack_t pHalKeyProcessFunction=KeyCallback; //声明指针函数变量并指向一个具体函数地址
halCBack_t taskCall[]=
{
KeyCallback,
LEDCallback
}; //指针函数数组
void main()
{
HalKeyConfig( 1, KeyCallback ); //调用该函数,参数里的指针函数指针指向具体函数即可
HalKeyConfig( 2, LEDCallback );
taskCall[0](11,11);
taskCall[1](22,22);
ShiYong(33,Ligback);
(*pHalKeyProcessFunction)(44,44); //指针函数具体使用
}
void HalKeyConfig (uint8 st, halCBack_t cback)//某个函数,调用指针函数作参数
{
cback(st,st);
}
void ShiYong (uint8 fa, int (*halCBack_t) (uint8 keys, uint8 state))
{
(*halCBack_t) (fa, fa);
cout<<"使用"<<endl;
}
void KeyCallback ( uint8 keys, uint8 state ) //具体实现函数
{
cout<<"按键函数"<<keys<<state<<endl;
}
void LEDCallback ( uint8 keys, uint8 state ) //具体实现函数
{
cout<<"LED函数"<<keys<<state<<endl;
}
int Ligback( uint8 keys, uint8 state ) //具体实现函数
{
cout<<"Lig函数"<<keys<<state<<endl;
return 1;
}