工程化编程实战callback接口学习笔记
首先申明配置信息:
操作系统:mac os 10.15.3
Vscode版本:February 2020 (version 1.43)
一、如何手动配置Vscode,并进行程序的调试
1.首先我们先在Vscode中,编译并运行程序,程序的源码地址:http://pan.baidu.com/s/1pJ0qAIv
2.将程序源码解压后,用Vscode导入,并作为工作空间
3.新建配置文件,注意在新建的时候,一定要选择LLDB的选项,在生成的lanch.json之后,新建任务tasks.json,此时一定要注意lanch.json的"preLaunchTask": "gcc build active file"和task.json中的label标签的值,一定要保持一致
我的配置文件如下:
这时候,程序就可以运行了,task中的配置是调用gcc 命令编译程序,gcc请自行安装
点击之后,运行的小三角行之后:程序就会运行,
但是,我们发现,当输入quit的时候,出现了错误:
二.打断点,调试
1.先给程序打上断点,发现,在FindCmd方法执行之后,p变成了null值
findcmd函数中,直接掉用了其他函数:
现在在SrearchLinkTabNode上面打上断点,发现在SreachLinkTabNode中调用了SreachCondition回调方法
在SreachContition中,当前的cmd的值为quit,当前节点的值为help,不匹配,继续往下走
第二次进入回调函数时:,数据不匹配,继续往下走:
在接下来的调试中,发现直接return null ,但是节点是有3个的,只执行了两个,因此,判断是while的条件错了
修改while的条件之后,获得了正确的结果,也就解决了这个Bug
三、总结Callback接口
1.实现机制:
1.定义一个回调函数;
2.提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者;
3.调用者在程序中调用接口函数
3.回调函数的好处
1.当我们想通过一个统一接口实现不同内容的时候,用回调函数来实现就非常合适。
2.任何时候,如果你所编写的函数必须能够在不同的时刻执行不同的类型的工作或者执行只能由函数调用者定义的工作,你都
可以用回调函数来实现。
3.使用此函数可以把调用者与被调用者分开,所以调用者不关心谁是被调用者。它只需知道存在一个具有特定原型和限制条件的被
调用函数。简而言之,回调函数就是允许用户把需要调用的函数的指针作为参数传递给一个函数,以便该函数在处理相似事件的时候可以
灵活的使用不同的方法。