记录下写的一个回调函数的示例
示例一:
#include <stdio.h>
#include <windows.h>
typedef void (*CallBackFunc)(void);
CallBackFunc register_name;
static int num = 0;
//中间函数
void RegisterDinnerName(CallBackFunc name)
{
register_name = name;
}
//回调函数
void Diner(void)
{
printf("*********\n");
printf("吃饭!!!!\n");
printf("*********\n");
}
void Cook(void)
{
printf("开始做饭\n");
Sleep(1000);
printf("饭做好了\n");
num++;
if (num == 8)
{
register_name();
}
}
//主调函数
int main()
{
//把Diner()赋值给了register_name的函数指针
RegisterDinnerName(Diner);
while (1)
{
Cook();
}
return 0;
}
示例二:
#include <stdio.h>
typedef int (*CallBackFunc)(int, int);
typedef struct
{
CallBackFunc sum_method;
CallBackFunc sub_method;
CallBackFunc mul_method;
}Operations;
Operations oper;
void Register_Method(CallBackFunc sum, CallBackFunc sub, CallBackFunc mul)
{
oper.sum_method = sum;
oper.sub_method = sub;
oper.mul_method = mul;
}
int Sum(int a, int b)
{
return a + b;
}
int Sub(int a, int b)
{
if (a > b)
{
return a - b;
}
}
int Mul(int a, int b)
{
return a * b;
}
int main(void)
{
char str[100];
int a, b,reg;
Register_Method(Sum,Sub,Mul);
while (1)
{
printf("输入运算法则符号:");
fgets(str, sizeof(str), stdin);
switch (str[0])
{
case '+':
printf("启动加法运算\n");
printf("输入第一位数字:");
scanf_s("%d", &a);
printf("输入第二位数字:");
scanf_s("%d", &b);
reg = oper.sum_method(a,b);
printf("reg=%d\n",reg);
break;
case '-':
printf("启动减法运算\n");
printf("输入第一位数字:");
scanf_s("%d", &a);
printf("输入第二位数字:");
scanf_s("%d", &b);
reg = oper.sub_method(a, b);
printf("reg=%d\n", reg);
break;
case '*':
printf("启动乘法运算\n");
printf("输入第一位数字:");
scanf_s("%d", &a);
printf("输入第二位数字:");
scanf_s("%d", &b);
reg = oper.mul_method(a, b);
printf("reg=%d\n", reg);
break;
default:
break;
}
}
return 0;
}