首页 > 其他 > 详细

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

时间:2020-03-19 00:14:26      阅读:84      评论:0      收藏:0      [点我收藏+]

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

1.实验环境

  • vscode+Remote-ssh插件

    使用vscode远程登录Linux虚拟机开发

  • xshell

    方便将windows主机中的文件传输到虚拟机中,本次实验室将实验代码传输到虚拟机中

  • Ubuntu虚拟机

2.实验步骤

  • 配置Remote-ssh

    • 配置远程主机ip和端口号

    技术分享图片

    • 配置公钥登录

      具体步骤可以参考此博客

  • 安装windows上的ssh服务

    设置->应用与功能->管理可选功能,点击添加ssh即可
  • 通过Remote-ssh登录到Linux
    技术分享图片

  • 测试代码

    • 由于在实际代码的执行过程中会出错,在代码中添加

      include "string.h"
    • 在终端下使用命令

      gcc -o menu linktable.c menu.c
    • 运行可执行文件

      分别测试help命令和quit命令,发现quit命令报错,结果如下:

      技术分享图片

  • 结果分析

    检查代码后发现,在主函数中,命令行接受命令后会去调用FindCmd函数,根据返回值结果来进行输出:

    技术分享图片

    我们继续检查这个FindCmd函数,看看其内部到底在干些什么事情.检查代码后发现,FindCmd函数内部只是调用了另外一个函数SearchLinkTableNode,它啥也没干:

    技术分享图片

    于是我们进入到SearchLinkTableNode函数内部,看看他的工作有哪些:

    技术分享图片

这段代码很明显是在遍历一个链表,可以很明显的看到边界代码逻辑中的一个缺陷:并没有遍历链表的最后一个节点.而最后一个节点正好是保存一个退出信息的.在InitMenuData函数中可以看到整个链表的结构以及每个节点保存的内容:

整个链表就这三个节点,分别对应着help命令,version命令以及quit命令:

技术分享图片

分析完成!

接下来我们将代码中的逻辑错误部分进行更正:

tLinkTableNode * SearchLinkTableNode(tLinkTable *pLinkTable, int Conditon(tLinkTableNode * pNode))
{
    if(pLinkTable == NULL || Conditon == NULL)
    {
        return NULL;
    }
    tLinkTableNode * pNode = pLinkTable->pHead;
    while(pNode != NULL)
    {    
        if(Conditon(pNode) == SUCCESS)
        {
            return pNode;                   
        }
        pNode = pNode->pNext;
    }
    return NULL;
}

重新编译,并执行,结果如下:

技术分享图片

大功告成!

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

原文:https://www.cnblogs.com/sa19225475/p/12520970.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!