C语言函数指针数组实现注册注销功能

在博客上看到一份很好的代码故保存下来,

这种函数实现的思想很好,写代码时可以参考。

#include <stdio.h>

typedef void (*poniter_fun)(int);
typedef struct poniter_desc {
	char *name;
	poniter_fun fp;
}poniter_desc,*p_poniter_desc;

poniter_desc poniter_array[10];
p_poniter_desc p_poniter_array;

int register_fun(char *name, poniter_fun fp)
{
	int i;
	for(i = 0;i < 10;i ++){
		if(!poniter_array[i].fp){
			poniter_array[i].name = name;
			poniter_array[i].fp = fp;
			return 0;
		}
	}
	return -1;
}

int unregister_fun(char *name)
{
	int i;
	for(i = 0;i < 10;i ++) {
		if((poniter_array[i].name) && !strcmp(poniter_array[i].name, name)) {
			if(poniter_array[i].fp) {
				poniter_array[i].name = NULL;
				poniter_array[i].fp = NULL;
				printf("unregister_fun i= %d - %s \n", i, name);
				return 0;
			} else {
				printf("poniter_array[%d].fp is NULL\n", i);
				return -1;
			}
		}
	}
	return -1;
}

void run(void)
{
	poniter_array[0].fp(1);
	poniter_array[1].fp(2);
}

void first(int i)
{
	printf("this is first fun %d \r\n", i);	
}

void second(int i)
{
	printf("this is second fun %d \r\n", i);
}

void main()
{
	register_fun("first",first);
	register_fun("second",second);
	
	run();

	unregister_fun("first");
	unregister_fun("second");
}

执行结果:

user2@rlk-buildsrv-tf32:~/test$ gcc zhizhen.c -o zhizhen
user2@rlk-buildsrv-tf32:~/test$ ./zhizhen 
this is first fun 1 
this is second fun 2 
unregister_fun i= 0 - first 
unregister_fun i= 1 - second 

作者:frank_zyp
您的支持是对博主最大的鼓励,感谢您的认真阅读。
本文无所谓版权,欢迎转载。

发布了59 篇原创文章 · 获赞 80 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/frank_zyp/article/details/102455643