注册回调函数实现方法

前言

回调函数(callback):回调函数就是在框架设计之初留下一个还未实现的接口,供后来人去实现(不实现也没事)。也可以理解在别人的函数中“插一脚”,有一种“你的过去我来不及参与,你的未来我奉陪到底”。 看代码的时候是不是总能看到api提供了一个注册函数,这个被封装,你是否好奇他是如何实现的?

话不多说,上代码

回调函数是由函数指针来实现的,在看这个之前先要了解函数指针哦

int (*p[5])() = {NULL};  // 创建一个函数指针数组
int main(int argc, char * argv[])  // 这个一般情况时官方封装成一个库函数,上电就会一直运行,类似守护进程
{
		register_hook_callback(test01);
		register_hook_callback(test02);
		 while(1)
	    {
	        hook();
	        printf("=====运行========\n");
	        Sleep(1000);
	    }
}
int hook()  // 官方封装起来
{
    int i = 0;
    for(i=0; i<5; i++)
    {
        if(p[i] != NULL)
        {
            p[i]();
        }
    }
}
int register_hook_callback(int (*p_callback)())  // 只是提供一个注册函数
{
    int i = 0;
    for(i=0; i<5; i++)
    {
        if(p[i] == NULL)
        {
            p[i] = p_callback;
            break;
        }
    }
}
int test01()  // 用户自己要添加的注册函数的函数
{
    printf("\ntest01 callback\n");
}
int test02()
{
    printf("\ntest02 callback\n");
}

运行结果

test01 callback

test02 callback
=====运行========

test01 callback

test02 callback
=====运行========

后言

相信有人注意到这个回调函数怎么无法传递参数呢!!! 0.0 还没研究到呢 过几天弄好了在分享一下,需要的关注下

你可能感兴趣的:(C语言,注册函数,回调函数)