工程化编程实战callback接口学习笔记
编译
首先需要在 menu.c 中添加头文件 string.h
在 vscode 中,打开 terminal, 输入指令:gcc -o test linktable.c menu.c
随后 ./test 运行

问题及解决

quit 报错。
打开 menu.c 文件,查看什么时候输出 'This is wrong cmd'.

以上可以看出,当 p 为 NULL 时返回错误信息。
进一步查看 FindCmd 函数:

再进一步查看 SearchLinkTableNode 函数,该函数的第二个参数为一个函数指针,即回调函数。

有 四种 情况下返回 NULL:
- pLinkTable 为空
- Condition 为空
- pNode 为空
- pNode == pLinkTable->pTail 时,Condition(pNode) != SUCCESS.
前三种情况很显然正确,来看第四种情况:
pLinkTable->pTail 是指链表的最后一个节点,pNode == pLinkTable->pTail 意味着遍历到了最后一个节点,bug 即为此处:在最后一个节点处未进行判断!
更改方法:

此时,编译,运行:

callback
回调函数就是一个通过函数指针调用的函数。
实现机制:
- 定义一个回调函数;
- 提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者;
- 当特定的事件或条件发生的时候,调用者使用函数指针调用回调函数对事件进行处理。
callback 最大的好处就是实现异步。
浙公网安备 33010602011771号