概念
回调函数:是指一段以参数的形式传递给其它代码的可执行代码。回调函数就是一个函数,和其它函数没有任何区别。需要注意的是,回调函数只是一种软件设计上的概念,几乎所有的编程语言都能实现回调函数。对于一般的函数来说,编写方是我们自己,调用方也是我们自己。但回调函数不是这样的,虽然函数编写方是我们自己,但是函数调用方不是我们,而是我们引用的其它模块。
menu5.2中的回调函数
Callback函数需要一个Call-in函数,在mune5.2中,定义接口为SearchLinkTableNode函数;同时,SearchLinkTableNode增加了一个参数args,callback函数Conditon也增加了一个参数args。args用于传递用户输入的菜单命令。
call-in函数实现如下
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;
}
callback函数实现如下,用于用户自定义设置查询条件,在findcmd函数中实现了在链表中按照给定条件查询节点的功能。
int SearchCondition(tLinkTableNode * pLinkTableNode, void * args)
{
char * cmd = (char*) args;
tDataNode * pNode = (tDataNode *)pLinkTableNode;
if(strcmp(pNode->cmd, cmd) == 0)
{
return SUCCESS;
}
return FAILURE;
}
/* find a cmd in the linklist and return the datanode pointer */
tDataNode* FindCmd(tLinkTable * head, char * cmd)
{
return (tDataNode*)SearchLinkTableNode(head, SearchCondition, (void*)cmd);
}