1 void
2 register_callback(struct proc_node **procs, void (*x))
3 {
4 struct proc_node *ipp;
5
6 for (ipp =*procs; ipp; ipp = ipp->next)//判断该回调函数是否存在
7 if (x == ipp->item)
8 return;
9 ipp = mknew(struct proc_node);
10 ipp->item = x;
11 ipp->next =*procs;
12 *procs = ipp;
13 }
采用函数链表存储处理函数,采用前端插入节点的方法完成。
1 void
2 unregister_callback(struct proc_node **procs, void (*x))
3 {
4 struct proc_node *ipp;
5 struct proc_node *ipp_prev =0;
6 for (ipp =*procs; ipp; ipp = ipp->next)
7 {
8 if (x == ipp->item)
9 {
10 if (ipp_prev)
11 ipp_prev->next = ipp->next;
12 else
13 *procs = ipp->next;
14 free(ipp);
15 return;
16 }
17 ipp_prev = ipp;
18 }
19 }
注册函数删除方式为普通的单向链表删除节点方法。