在博客上看到一份很好的代码故保存下来,
这种函数实现的思想很好,写代码时可以参考。
#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
您的支持是对博主最大的鼓励,感谢您的认真阅读。
本文无所谓版权,欢迎转载。