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

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

资源:http://pan.baidu.com/s/1pJ0qAIv

显示报错,在这个区域内未声明。添加头文件String.h


上面显示不能打开输出文件,而后我到工程目录文件夹中找,并无生成menu.exe二进制文件。
而后我直接在终端利用gcc命令生成menu.exe
gcc -o menu menu.c linktable.c


按照错误提示,我在工程目录下新建一个build文件夹,而后将gcc生成得menu.exe文件粘贴到这里,发现仍是有别的错误。
因而我放弃了,仍是用终端命令运行程序。

查看结果,使用quit发现没有退出程序,而是提示worng cmd,显然是错误的。函数

2、经过VSCode+GDB调试程序找出quit命令没法运行的bug产生的缘由

2ui

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)
   运行成功!
#### 3、分析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是个函数地址。
相关文章
相关标签/搜索