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

一、实验要求

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

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

  • 分析callback接口的运行机制,总结callback接口设计的方法

二、实验过程

    首先对程序进行编译

gcc -g linktable.c menu.c -o menu  -lpthread

得到menu.exe,运行它发现输入quit后出现错误。

使用gdb对menu.exe进行调试

 

在下面发现程序三次循环后退出,由InitMenuData这个函数可以知道,有三个命令分别为help,version和quit可知循环判断出现了问题

 

于是将while(pNode != pLinkTable->pTail)改为while(pNode != NULL)

运行程序,发现程序成功执行

 

 

 

三、分析callback接口的运行机制,总结callback接口设计的方法

   在下面代码中使用了回调函数

    

 

 

      回调函数是把函数的指针作为参数传递给另一个函数,callback函数的调用实质上是在一个模块内部调用模块外部的另一个模块实现的函数。这种方式提供了极大的灵活性。

   那么如何设计回调函数?

    1、先定义回调函数原型,顺便定义一个新的指针变量类型。
    2、设计者以该回调函数指针变量类型定义新的变量,实现参数传递和数据保存。
    3、调用前先检查指针有效性,避免跳到空指针处,造成崩溃。

 

posted @ 2020-03-19 21:44  pretty_ustc  阅读(112)  评论(0)    收藏  举报