C语言--回调函数和注册

函数注册和回调函数

1、什么是函数注册和回调
回调函数无非是对函数指针的应用,说白了就是通过使用函数指针来调用一个函数,而函数注册就是把函数指针作为参数传递出去便于别的模块使用的过程。所以函数注册就是为了回调,先注册再回调。

2、为什么要使用回调函数
回调函数可以把调用者与被调用者分开,所以调用者不关心谁是被调用者以及被调用者如何实现。它只需知道存在一个具有特定原型和限制条件的被调用函数。简而言之,回调函数就是允许用户把需要调用的方法的指针作为参数传递给一个函数,以便该函数在处理相似事件的时候可以灵活的使用不同的方法。

3、回调函数常见应用场景
不同模块由不同开发人员实现,为了实现模块间信息交互触发行为。(似乎很难理解,下面看模型吧)

3、函数注册和回调的模型

模块A用来实现出现各种事件后的函数处理,程序B 用来监控发生的事件。A模块向B模块注册函数,B模块监控到事件后回调事件的函数处理。

直接上代码:

//test.h  头文件
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
typedef void (*pf_callbakck)(int a);

typedef struct Compute_ST
{
int index;
pf_callbakck function;
}Compute_ST;

int Registe_Callback_Fun(Compute_ST *registed_fun);

void mgmtb_fun(int num);
/*A Module*/
/*TestA.c 文件
实现回调函数*/
#include "test.h"

void callback_fun(int event)
{
switch(event)
{
case 1:
{
printf("ABCDEFG.\n");

}
break;
case 2:
{
printf("abcdefg.\n");
}
break;
case 3:
{
printf("1234567.\n");
}
break;
case 4:
{
printf("7654321.\n");
}
break;
default:
{
printf("New event, %d.\n",event);
}
}
}

void main()
{
int event = 0;
Compute_ST ptr_compute;

ptr_compute.index = 1;
ptr_compute.function = callback_fun;
//注册回调函数
if(-1 == Registe_Callback_Fun(&ptr_compute))
{
printf("Registe failed.\n");
}

for(;;)
{
printf("Enter number:");
scanf("%d", &event);

if(event == 0)
{
return;
}
//触发事件
mgmtb_fun(event);
}
return;
}
/*B Module
testB.c文件
实现注册函数
实现事件触发回调*/
#include "test.h"

pf_callbakck g_ptrfun;

int Registe_Callback_Fun(Compute_ST *registed_fun)
{
if(1 != registed_fun->index)
{
printf("Registe failed.\n");
return -1;
}
g_ptrfun = registed_fun->function;
}

void mgmtb_fun(int event)
{
g_ptrfun(event);
}

把上面三个文件放在同一个目下编译

[root@localhost home]# gcc testA.c testB.c -o test.exe
[root@localhost home]# ./test.exe
Enter number:3
1234567.
Enter number:2
abcdefg.
Enter number:1
ABCDEFG.
(0)

相关推荐

  • 在C中注册回调函数是什么意思? | 码农家园

    what do you mean by registering a callback function in C? 谁能告诉我在C中注册一些示例的回调函数的确切含义? 我在网上进行了很多搜索,但找不到 ...

  • 一文搞懂C语言回调函数

    什么是回调函数 我们先来看看百度百科是如何定义回调函数的: 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这 ...

  • C 语言回调函数详解 | 菜鸟教程

    C 语言回调函数详解 | 菜鸟教程

  • 关于C语言回调函数的详解~

    关于C语言回调函数的详解~

  • C语言 — 函数的注册和回调

    函数注册和回调函数 1.什么是函数注册和回调 回调函数无非是对函数指针的应用,说白了就是通过使用函数指针来调用一个函数,而函数注册就是把函数指针作为参数传递出去便于别的模块使用的过程.所以函数注册就是 ...

  • C语言系列_9:函数指针,函数指针数组和回调函数

    (5)函数指针 A:什么是函数指针 数组指针是指向数组的,函数指针就是指向函数的,也就是函数也是有自己的地址的 这里要注意一点,数组的时候&数组名是数组的地址,数组名是数组首元素的地址. 而函 ...

  • 【C语言更新】结构体中实现函数成员以及回调函数

    文/Edward 前面说,结构体内部的成员变量可以是普通变量,数组,除了这些变量之外,还可以是指针,结构体,枚举,共用体等.综上所述的结构体内部成员中,我们可以发现一个结构体内部的成员竟然不包含函数. ...

  • C语言、嵌入式重点知识:回调函数

    前言 这里提到了一个关键词:专用.与专用对应的词是通用. 我们从字面上可以很容易理解这两个词,专用就是针对特定情况的,特点就是很有局限性. 通用就是可以针对大多数情况(更理想的就是所有情况),特点就是 ...

  • 深入理解C语言main函数的参数

    文/Edward  1  命令就是程序 我想绝大多数看这篇文章的读者基本上都用过Windows操作系统下的命令提示符.比起图形化界面的操作,如果熟悉了Windows的命令提示符,你将会更快地操作这个操 ...