Windows 上用 VSCode 开发 C/C++



下载 Visual Studio Code (vscode)

  • 下载链接:https://code.visualstudio.com/Download
  • 安装路径自定义

安装cpptools

ok

下载MinGW 和 node.js ,并配置环境变量

  • MinGW下载地址:https://sourceforge.net/projects/mingw-w64/files/

    进入网站后向下滑,找到最新版本,我选择的如下图

    001

    下载解压后安装到指定路径,我安装的路径是 E:\vs\MinGW

  • 在下载MinGW前可能需要下载node.js ,可去其官网下载 https://nodejs.org/zh-cn/

  • 安装完成后配置环境变量,根据自己的安装路径如下配置:image-20210304132337278

  • 完成以上步骤后,验证环境变量是否配置成功:

    按键 win + R 输入“ cmd ” 打开命令行工具,然后在命令行中输入 g++ -v ,如果出现以下情况则说明配置成功003

使用单个.cpp文件配置C++文件

  • 首先,我在桌面上创建文件夹 “ new_project ”。

  • 打开 new project ,新建“ test.c ”文件,输入以下代码。

    #include <stdio.h>
    
    int main(void)
    {
        printf("Hello world!");
        return 0 ;
    }
    
  • 进入调试界面添加配置环境,选择 C++(GDB/LLDB),再选择 g++.exe,之后会自动生成 launch.json 配置文件。

    029

    028

  • 接下来编辑 launch.json 文件如下:

    {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "task g++",		//修改此项
                "type": "cppdbg",
                "request": "launch",
                "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
                "args": [],
                "stopAtEntry": false,
                "cwd": "${workspaceFolder}",
                "environment": [],
                "externalConsole": true,	//编辑此项,弹出终端
                "MIMode": "gdb",
                "miDebuggerPath": "E:\\vs\\MinGW\\mingw64\\bin\\gdb.exe",
                "setupCommands": [
                    {
                        "description": "为 gdb 启用整齐打印",
                        "text": "-enable-pretty-printing",
                        "ignoreFailures": true
                    }
                ],
                "preLaunchTask": "task g++"		//修改此项名称
            }
        ]
    }
    
  • 接着编辑 task.json 如下:

    {
        "version": "2.0.0",
        "tasks": [
            {
                "type": "cppbuild",
                "label": "task g++",	//修改此项与launch.json中的preLaunchTask中一致
                "command": "E:\\vs\\MinGW\\mingw64\\bin\\gcc.exe",
                "args": [
                    "-g",
                    "${file}",
                    "-o",
                    "${fileDirname}\\${fileBasenameNoExtension}.exe"
                ],
                "options": {
                    "cwd": "${workspaceFolder}"
                },
                "problemMatcher": [
                    "$gcc"
                ],
                "group": {
                    "kind": "build",
                    "isDefault": true
                },
                "detail": "调试器生成的任务。"
            },
        ],   
    }
    
  • 保存后回到test.c文件按F5编译链接运行成功,(name、preLaunchTask和 label可修改也可以保持默认,但是三者必须保持一致

编写C++程序添加并应用自定义头文件

  • 但是我们完成项目过程中为了代码的可移植性和可读性,往往需要自定义头文件。

  • 本项目完成以下功能:

    1. 首先读取一串列标号。这些标号成对出现,表示输入行的列范围。这串列标号以一个负值结尾,作为结束标志。
    2. 剩余的输入行被程序读入并打印,然后输入行中被选中范围的字符串被提取出来并打印。
    3. 每行第一列的列标号为零。
  • 文件结构如下:

    C:\Users\15476\Desktop\new_project

    030

    C:\Users\15476\Desktop\new_project\include

    031

  • 代码如下:

    test.c

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include"rearrange.h"
    #include"read_column_numbers.h"
    
    #define MAX_COLS 20             /*所能处理的最大列号*/
    
    int main(void)
    {
        int n_columns;              /*进行处理的列标号*/
        int columns[MAX_COLS];      /*需要处理的列数*/
        char input[MAX_INPUT];      /*容纳输入行的数组*/
        char output[MAX_INPUT];     /*容纳输出行的数组*/
    
        /*
        **读取该串列标号
        */
        n_columns = read_column_numbers(columns, MAX_COLS);
    
        /*
        **读取、处理和打印剩余的输入行
        */
        while (gets(input) != NULL) {
            printf("Original input : %s\n", input);
            rearrange(output, input, n_columns, columns);
            printf("Rearranged line: %s\n", output);
        }
    
        return EXIT_SUCCESS;
    

    read_column_numbers.c

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include"read_column_numbers.h"
    
    /*
    **读取列标号,如果超出规定范围则不予理会
    */
    int read_column_numbers(int columns[], int max)
    {
        int num = 0;
        int ch;
    
        /*
        **取得列标号,如果所读取的数小雨0则停止
        */
        while (num < max && scanf("%d", &columns[num]) == 1 && columns[num] >= 0)
        {
            num += 1;
        }
    
        /*
        **确认已经读取的标号为偶数个
        */
        if (num % 2 != 0) {
            puts("Last column number is not paired.");
            exit(EXIT_FAILURE);
    
        }
    
        /*
        **丢弃该行中包含最后一个数字的那部分内容
        */
        while ((ch = getchar()) != EOF && ch != '\n');
    
        return num;
    
    }
    
    

    read_column_numbers.h

    #ifndef READ_COLUMN_NUMBERS_H
    #define READ_COLUMN_NUMBERS_H
    
    int read_column_numbers(int columns[], int max);
    
    #endif
    

    rearrange.c

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include"rearrange.h"
    
    /*
    **处理输入行,将指定列的字符连接在一起,输出行以NUL结尾
    */
    void rearrange(char* output, char const* input, int n_columns, int const columns[])
    {
        int col;                /*columns数组的下标*/
        int output_col;         /*输出列计数器*/
        int len;                /*输出行的长度*/
    
        len = strlen(input);
        output_col = 0;
    
        /*
        **处理每对列标号
        */
        for (col = 0; col < n_columns; col += 2)
        {
            int nchars = columns[col + 1] - columns[col] + 1;
    
            /*
            **如果输出行结束或输出行数组已满,就结束任务
            */
            if (columns[col] >= len || output_col == MAX_INPUT - 1)
                break;
    
            /*
            **如果输出行数据空间不够,只复制可以容纳的数据
            */
            if (output_col + nchars > MAX_INPUT - 1)
                nchars = MAX_INPUT - output_col - 1;
    
            /*
            **复制相关数据
            */
            strncpy(output + output_col, input + columns[col], nchars);
            output_col += nchars;
    
        }
    
        output[output_col] = '\0';
    
    }
    

    rearrange.h

    #ifndef REARRANGE_H
    #define REARRANGE_H
    
    #define MAX_INPUT 1000          /*每个输入行的最大长度*/
    void rearrange(char* output, char const* input, int n_columns, int const columns[]);
    
    #endif
    
  • 想要在vscode中用自定义头文件,可按如下步骤进行(就以以上项目为实例)<首先已经完成单个cpp文件配置C/C++>

    1. 在vscode中按F1,然后点击 “ C/C++: Edit Configurations (JSON) ” ,会弹出“ c_cpp_properties.json ”文件:

      {
          "configurations": [
              {
                  "name": "Win32",
                  "includePath": [
                      "${workspaceFolder}/**",
                      "C:\\Users\\15476\\Desktop\\new_project\\include"	//添加include的路径
                  ],
                  "defines": [
                      "_DEBUG",
                      "UNICODE",
                      "_UNICODE"
                  ],
                  "windowsSdkVersion": "10.0.18362.0",
                  "compilerPath": "E:/vs/MinGW/mingw64/bin/g++.exe",		//注意此项,若为其它编译器的路径会报错
                  "cStandard": "c17",
                  "cppStandard": "c++17",
                  "intelliSenseMode": "windows-gcc-x64"		//intelliSenseMode应与使用编译器一致
              }
          ],
          "version": 4
      }
      
    2. 配置“ tasks.json ” :

      {
          "tasks": [
              {
                  "type": "cppbuild",
                  "label": "task g++",
                  "command": "E:\\vs\\MinGW\\mingw64\\bin\\gcc.exe",
                  "args": [
                      "-g",
                      "${file}",
                      "-I","C:\\Users\\15476\\Desktop\\new_project\\include",		//-l参数就是用来指定程序要链接的库,添加include路径
                      "C:\\Users\\15476\\Desktop\\new_project\\read_column_numbers.c",	//添加read_column_numbers.c路径
                      "C:\\Users\\15476\\Desktop\\new_project\\rearrange.c",		//添加rearrange.c路径
                      "-o",
                      "${fileDirname}\\${fileBasenameNoExtension}.exe"
                  ],
                  "options": {
                      "cwd": "${workspaceFolder}"
                  },
                  "problemMatcher": [
                      "$gcc"
                  ],
                  "group": {
                      "kind": "build",
                      "isDefault": true
                  },
                  "detail": "调试器生成的任务。"
              },
          ],
          "version": "2.0.0"   
      }
      
    3. 保存后回到test.c文件,按F5:

      033

      运行成功

参考链接

https://www.cnblogs.com/bpf-1024/p/11597000.html
https://blog.csdn.net/Penguuuuiiiiiiin/article/details/104191496?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=e5768c61-7e83-4ce6-bc2e-a8ce7efa03f3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control
https://blog.csdn.net/wcx1293296315/article/details/85679715?utm_medium=distribute.pc_relevant_bbs_down.none-task–2allsobaiduenddefault-1.nonecase&amp;depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task–2allsobaiduenddefault-1.nonecase

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值