工程化编程实战callback接口学习笔记

编译

首先需要在 menu.c 中添加头文件 string.h

在 vscode 中,打开 terminal, 输入指令:gcc -o test linktable.c menu.c
随后 ./test 运行
工程化编程实战callback接口学习笔记_第1张图片

问题及解决

在这里插入图片描述
quit 报错。

打开 menu.c 文件,查看什么时候输出 'This is wrong cmd'.
工程化编程实战callback接口学习笔记_第2张图片
以上可以看出,当 p 为 NULL 时返回错误信息。
进一步查看 FindCmd 函数:
工程化编程实战callback接口学习笔记_第3张图片
再进一步查看 SearchLinkTableNode 函数,该函数的第二个参数为一个函数指针,即回调函数。
工程化编程实战callback接口学习笔记_第4张图片
有 四种 情况下返回 NULL:

  1. pLinkTable 为空
  2. Condition 为空
  3. pNode 为空
  4. pNode == pLinkTable->pTail 时,Condition(pNode) != SUCCESS.

前三种情况很显然正确,来看第四种情况:
pLinkTable->pTail 是指链表的最后一个节点,pNode == pLinkTable->pTail 意味着遍历到了最后一个节点,bug 即为此处:在最后一个节点处未进行判断!

更改方法:
在这里插入图片描述

此时,编译,运行:
在这里插入图片描述

callback

回调函数就是一个通过函数指针调用的函数。

实现机制:

  1. 定义一个回调函数;
  2. 提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者;
  3. 当特定的事件或条件发生的时候,调用者使用函数指针调用回调函数对事件进行处理。

callback 最大的好处就是实现异步。

你可能感兴趣的:(工程化编程实战callback接口学习笔记)