代码中的软件工程

Posted lixingxuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代码中的软件工程相关的知识,希望对你有一定的参考价值。

一、编译和调试环境配置

  1、安装vscode中的C/C++扩展

    打开vscode,点击侧边栏的扩展(Ctrl+Shift+X),搜索c++,点击安装C/C++

    技术图片 

    C/C++扩展不包含C++编译器或调试器

 

 

  2、安装C++编译器和调试器 

    本机使用Windows系统,因此下载Mingw-w64(Windows中的GCC,http://mingw-w64.org)

    安装过程中有几个选项需要说明:

      Version制定版本号,从4.9.1-8.x.0,按需选择,没有特殊要求就用最新版吧;

      Architecture跟操作系统有关,64位系统选择x86_64,32位系统选择i686;

      Threads设置线程标准可选posix或win32;

      Exception设置异常处理系统,x86_64可选为seh和sjlj,i686为dwarf和sjlj;

      Build revision构建版本号,选择最大即可

    技术图片

 

 

    安装完成后,需要将安装目录下的bin目录加入环境变量

    添加环境变量后,打开CMD,执行gcc -v看看是否安装成功

    技术图片

 

 

   3、

    使用vscode打开一个C文件,点击侧边栏的运行(Ctrl+Shift+D),点击运行和调试,选择环境C++(GBD/LLDB)

    #注意文件夹路径不能有中文

    技术图片

    选择配置gcc.exe

    技术图片

 

 

     生成了.vscode文件夹,其中有launch.json和tasks.json文件

    技术图片

    tasks.json告诉vscode如何生成(编译)程序的文件,将调用gcc编译器基于源代码创建可执行文件

    launch.json用于调试器设置

    技术图片

 

二、软件工程方法

  一个菜单程序的生长

  初始代码lab2:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char cmd[128];
    while(1)
    {
        scanf("%s", cmd);
        if(strcmp(cmd, "help") == 0)
        {
            printf("This is help cmd!
");
        }
        else if(strcmp(cmd, "quit") == 0)
        {
            exit(0);
        }
        else
        {
            printf("Wrong cmd!
");
        }
    }
}

  1、模块化设计

    模块化(Modularity)是在软件系统设计时保持系统内各部分相对独立,以便每一个部分可以被独立地进行设计和开发

    lab3.1代码

#include <stdio.h>
#include <stdlib.h>

int Help();
int Quit();

#define CMD_MAX_LEN 128
#define DESC_LEN    1024
#define CMD_NUM     10

typedef struct DataNode
{
    char*   cmd;
    char*   desc;
    int     (*handler)();
    struct  DataNode *next;
} tDataNode;

static tDataNode head[] = 
{
    {"help", "this is help cmd!", Help,&head[1]},
    {"version", "menu program v1.0", NULL, &head[2]},
    {"quit", "Quit from menu", Quit, NULL}
};

int main()
{
    /* cmd line begins */
    while(1)
    {
        char cmd[CMD_MAX_LEN];
        printf("Input a cmd number > ");
        scanf("%s", cmd);
        tDataNode *p = head;
        while(p != NULL)
        {
            if(strcmp(p->cmd, cmd) == 0)
            {
                printf("%s - %s
", p->cmd, p->desc);
                if(p->handler != NULL)
                {
                    p->handler();
                }
                break;
            }
            p = p->next;
        }
        if(p == NULL) 
        {
            printf("This is a wrong cmd!
 ");
        }
    }
}

int Help()
{
    printf("Menu List:
");
    tDataNode *p = head;
    while(p != NULL)
    {
        printf("%s - %s
", p->cmd, p->desc);
        p = p->next;
    }
    return 0; 
}

int Quit()
{
    exit(0);
}

 

    

  2、可重用接口

  3、线程安全

 

 

 

     

 

        

 

二、软件工程理解和分析

以上是关于代码中的软件工程的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段9——JS中的面向对象编程

在下面的代码片段中的剩余 ='passthrough' 处的代码中出现语法错误

latex在vim中的代码片段

使用 Git 来管理 Xcode 中的代码片段

C 中的共享内存代码片段

如何使用模块化代码片段中的LeakCanary检测内存泄漏?