callback函数的深入理解

回调函数就是一个被作为参数传递的函数。在C语言中,回调函数只能使用函数指针实现,在C++、Python、ECMAScript等更现代的编程语言中还可以使用仿函数或匿名函数。

回调函数工作机制有两点

1.使用函数指针,当我们希望在某个函数中使用另一个未知的函数时,可以将该未知函数的指针传递给这个函数。这种方式使得调用方无需了解被调用函数的具体实现细节;
2.参数传递,在调用 Callback 函数时,我们可以传递参数给它,从而提供额外的上下文信息。这样,被调用的函数可以根据这些参数执行特定的操作,使得调用方与被调用方之间保持解耦。

回调函数的使用可以大大提升编程的效率,这使得它在现代编程中被非常多地使用。同时,有一些需求必须要使用回调函数来实现。

在menu程序中,linktableInternal.h定义了LinkTable的内部数据结构。包括LinkTableNode结构体和LinkTable结构体,这两个结构体分别表示链表的节点和链表本身。这个文件主要被linktable.h和linktable.c引用,提供了链表操作所需的基本数据结构;
linktable.h这个头文件定义和声明了LinkTable操作的接口。包括创建、删除链表,以及添加、删除、搜索链表节点等功能。同时,这个文件还包含了一些宏定义,例如SUCCESS和FAILURE,用于表示操作结果;
linktable.c实现了linktable.h中定义的链表操作接口。包括创建链表、删除链表、添加节点、删除节点、搜索节点等功能。这个文件中的函数实现了回调函数机制。例如,SearchLinkTableNode函数通过传入一个回调函数Condition来对链表进行搜索,实现了搜索功能的解耦;
menu.c包含了一个简单的命令行菜单程序,它使用了linktable.h提供的链表接口。在这个程序中,命令及其对应的描述和处理函数被存储在一个链表中。程序通过查找链表来处理用户输入的命令。这个程序中的FindCmd函数使用了之前提到的SearchLinkTableNode函数,展示了如何利用回调函数进行搜索。

利用callback函数参数使Linktable的查询接口更加通用,有效地提高了接口的通用性。查询接口代码如下:

tLinkTableNode * SearchLinkTableNode(tLinkTable *pLinkTable, 
                        int Condition(tLinkTableNode * pNode, void * args),
                        void * args)
{
    if(pLinkTable == NULL || Condition == NULL)
    {
        return NULL;
    }
    tLinkTableNode * pNode = pLinkTable->pHead;
    while(pNode != NULL)
    {    
        if(Condition(pNode, args) == SUCCESS)
        {
            return pNode;                    
        }
        pNode = pNode->pNext;
    }
    return NULL;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值