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

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

工作环境:win10、MinGW-W64(gcc version 5.2.0、gdb version 7.9.1)

1. VS Code 下编译运行

在项目目录下运行命令:**gcc .\linktable.c .\menu.c -o cmdline **

经判断缺少头文件 string.h ,在 menu.c 的首部添加 #include 后重新编译

百度后发现原因是缺少头文件 pthread.h ,在 linktable.c 中添加 #include 并修改编译命令为:gcc .\linktable.c .\menu.c -o cmdline -lpthread

成功编译后,运行可执行文件 cmdline.exe ,测试发现运行输入cmd 时有bug!

工程化编程实战callback接口学习笔记_第1张图片

2. 通过VSCode+GDB调试程序分析原因

重新编译生成可调试的可执行程序:gcc -g .\linktable.c .\menu.c -o cmdline -lpthread

运行命令: gdb .\cmdline.exe ,使用 gdb 对程序今行调试。

工程化编程实战callback接口学习笔记_第2张图片

通过对 menu.c 源码初步分析,选择 FindCmd() 函数为下断点,即 break 60

工程化编程实战callback接口学习笔记_第3张图片

输入 quit 后,单步,接着单步步入(step)SearchLinkTableNode() 函数,如下图:

工程化编程实战callback接口学习笔记_第4张图片

发现,当执行到应该判断输入命令是否为 “quit” 时, 没能进入循环体判断语句,而直接返回 NULL,故会导致之后窗口输出 “This is a wrong cmd!” 。
结合源码分析,问题出在 while 循环条件,最后对 quit 的判断没能进行,所以这里修改 while 循环条件为 while(pNode != pLinkTable->pTail->pNext)

工程化编程实战callback接口学习笔记_第5张图片

重新编译运行,发现 bug 已解决:

工程化编程实战callback接口学习笔记_第6张图片

3. 分析callback接口设计

什么是回调函数?

回调函数就是一个通过函数指针调用的函数。把函数的指针(地址)作为参数传递给另一个函数,当这个指针调用其所指向的函数时,就称这是回调函数。回调函数不是该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

工作机制

  1. 定义一个回调函数
  2. 将回调函数的地址注册给调用者
  3. 当特定事件发生时,调用者使用函数指针调用函数来响应相关事件

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