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

一、在VSCode下编译运行lab5-1.tar.gz

资源:http://pan.baidu.com/s/1pJ0qAIv
工程化编程实战callback接口学习笔记_第1张图片
显示报错,在这个区域内未声明。添加头文件String.h
工程化编程实战callback接口学习笔记_第2张图片
工程化编程实战callback接口学习笔记_第3张图片
上面显示不能打开输出文件,然后我到工程目录文件夹中找,并没有生成menu.exe二进制文件。
然后我直接在终端利用gcc命令生成menu.exe
gcc -o menu menu.c linktable.c
工程化编程实战callback接口学习笔记_第4张图片
工程化编程实战callback接口学习笔记_第5张图片
按照错误提示,我在工程目录下新建一个build文件夹,然后将gcc生成得menu.exe文件粘贴到这里,发现还是有别的错误。
于是我放弃了,还是用终端命令运行程序。
工程化编程实战callback接口学习笔记_第6张图片
查看结果,使用quit发现没有退出程序,而是提示worng cmd,显然是错误的。

二、通过VSCode+GDB调试程序找出quit命令无法运行的bug产生的原因

2

   gcc -g linktable.c menu.c -o menu
   gdb menu
   ```
   ![](https://img2020.cnblogs.com/blog/1880361/202003/1880361-20200318202527400-1133813424.png)
   ![](https://img2020.cnblogs.com/blog/1880361/202003/1880361-20200318203440424-716929217.png)
   ![](https://img2020.cnblogs.com/blog/1880361/202003/1880361-20200318203500514-2026943992.png)
   ![](https://img2020.cnblogs.com/blog/1880361/202003/1880361-20200318203704873-1509894158.png)
   由于返回了NULL,
   ![](https://img2020.cnblogs.com/blog/1880361/202003/1880361-20200318204033020-1973836808.png)
   所以在menu.c中判断语句会打印出This is a wrong cmd!
   ![](https://img2020.cnblogs.com/blog/1880361/202003/1880361-20200318210217325-1766693865.png)
   查看源代码得到的上图,可知quit在链表的最后一个节点。
   ![](https://img2020.cnblogs.com/blog/1880361/202003/1880361-20200318210506202-488352293.png)
   ![](https://img2020.cnblogs.com/blog/1880361/202003/1880361-20200318210608166-1796834197.png)
   运行成功!
#### 三、分析callback接口的运行机制,总结callback接口设计的方法 ####
 3
   关于回调函数的原理,我在这里链接一篇知乎:https://www.zhihu.com/question/19801131
   在这个程序中
   ```
   tDataNode* FindCmd(tLinkTable * head, char * cmd)
{
   return  (tDataNode*)SearchLinkTableNode(head,SearchCondition);
}
   ```
   其中SearchLinkTableNode(head,SearchCondition)函数就是个回调函数,head是个结构体变量,而SearchCondition是个函数地址。

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