0.前言
  • VS Code是一个轻量级工具,适合于简单的编辑、编译、运行C/C++文件,特别是在学习C/C++语言的时候;
  • 如果需要开发C/C++项目,建议选择使用宇宙第一 IDE——Visual Studio。
1.关于编译工具链

在本文中我们使用MinGW-W64编译工具链来编译C语言程序,所以请确保你已经安装好了MinGW并且会编译程序,其安装包可以在不限速下载站下载:

【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享

MinGW的安装和使用方法见我的另一篇博客:

2.安装C/C++扩展

在VScode扩展 市场搜索C/C++,点击安装即可:
【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_02
【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_03

注意:此扩展程序不包括C/C++编译器,仅提示C程序之间的定义跳转和查看声明功能。

如果在编写C程序中需要自动提示功能,还需要安装一个扩展:
【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_04

3.创建工作区

VS Code以文件夹作为工作区,所以创建工作区有两种方式:

  • 在Windows命令行进入文件夹,使用命令code .打开文件夹,创建工作区;
  • 先打开VS Code,然后使用VS Code打开文件夹,创建工作区;

这里我创建一个c_project文件夹并在VS Code打开作为工作区:
【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_05

4.编辑代码

在工作区中添加文件helloworld.c,并编辑如下代码:

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

int main(void)
{
    printf("Hello World.\n");

    system("pause");

    return 0;
}

在编辑代码时,因为安装了C/C++扩展,所以有如下的功能:

  • 代码智能感知
    【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_06

  • 窥视定义(将鼠标放置在符号上,按Alt+F12):
    【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_07

  • 查看定义(按下Ctrl,然后点击符号):
    【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_08

5. 编译和运行C程序

最开始提到,VSCode只是一个编辑器而已,没有提供编译器和调试器,所以无法编译程序,即使安装扩展也无法编译,所以在文章的最开始首先安装并了解了MinGW的使用,如果你还不会使用MinGW,请先了解其使用方法。

但是VSCode有个好处就是集成终端功能,按下Ctrl+`(键盘ESC下方的那个键),即可调出VSCode的集成终端,如图:
【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_09

结合MinGW中提供的Gcc工具,可以直接在该终端中使用命令编译,比如:

gcc Test.c -o Test.exe

【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_10

如何运行呢?也非常方便,就像在Linux中一样,直接输入刚刚编译出的可执行文件名即可运行:
【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_11

下面这一大堆不用管,没太大作用,只作了解即可!!!

下面这一大堆不用管,没太大作用,只作了解即可!!!

下面这一大堆不用管,没太大作用,只作了解即可!!!

5. 编译调试设置

5.1.配置编译器路径

  1. 使用Ctrl+Shift+P打开命令面板,输入C/C++,推荐列表中有UI方式和JSON格式的两种编辑配置方式,如图(这里我们选择Edit configurations(JSON)):
    【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_12
  2. VS Code会自动在工作区中的.vscode目录下创建c_cpp_properties.json文件,这个文件是一个JSON格式文件,用来指定编译器路径,其原始内容如下:
    【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_13
  3. 如果程序中包含不在当前工作区或者标准库路径中的头文件,需要在includepath一项中设置;
  4. compilerPath一项应该配置为当前系统中gcc编译器(如果是c++文件,则为g++编译器)所在的路径,比如我的电脑上已经安装了MinGW-W64,则路径应为:
C:\\mingw64\\bin\\gcc.exe
  1. cStandard和cppStandard用于选择编译器使用的C/C++语言标准,这里我们使用最新的c11;
  2. intelliSenseMode是IntelliSense功能的设置,这里我们设置为gcc-x64,有助于IntelliSense功能根据编译器所在的路径来自动推断C/C++标准库头文件的路径,以提供正确的路径;

最后放上我的完整配置:

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "compilerPath": "C:\\mingw64\\bin\\gcc.exe",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "gcc-x64"
        }
    ],
    "version": 4
}

5.2.创建构建任务

在配置完gcc编译器路径后,需要创建一个tasks.json文件来告诉VS Code如何构建(编译)程序,此任务将调用gcc编译器基于源代码创建可执行文件。

  1. 按Ctrl+Shift+P调出命令面板,输入task,选择Tasks:Configure Default Build Task:
    【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_14
  2. 选择使用模板创建tasks.json文件:
    【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_15
  3. 选择Others:
    【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_16
  4. VScode会在.vscode文件夹创建tasks.json文件,该文件指定如何构建可执行文件,其默认内容如下:
    【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_17
  5. 添加构建任务,使用下面的代码替换整个文件内容,如下:
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build hello world",
            "type": "shell",
            "command": "gcc",
            "args": [
                "-g",
                "-o",
                "helloworld",
                "helloworld.c"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

其中:

  • label指定该任务的名称,后续会在VS Code Command Palette中看到;
  • command指定要运行的程序;
  • args指定传递给gcc的命令行参数,注意这些参数必须按照编译器指定的顺序排列;
  • group中的isDefault: true指定了当我们按下Ctrl+Shift+B时该任务会被自动运行,这仅仅是为了方便,如果设置为false,则必须要在命令面板中手动运行该任务;

5.3.配置调试设置

在添加完构建任务后,就可以生成可执行程序了,接下来我们配置调试设置,使得按下F5之后VS Code会自动启动gcc调试器(gdb.exe)。

  1. 选择调试一栏,然后点击设置按钮:
    【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_18
  2. 选择C++(GDB/LLDB):
    【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_19
  3. 选中后VS Code会自动在.vscode下生成launch.json文件,该文件指定了调试器的设置,其默认内容如下:
    【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_20
  4. program中的最后需要指定可执行程序的名称;
  5. stopAtEntry是启动调试时自动停止在程序入口第一行main,可设置为true或false;
  6. miDebuggerPath中需要指定gdb调试器的路径,比如在这个我指定为C:/mingw64/bin/gdb.exe;

至此,完整的launch.json设置如下:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/helloworld.exe",
            "args": [],
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "gdb",
            "miDebuggerPath": "C:/mingw64/bin/gdb.exe",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}
6.构建程序

之前在5.2节中创建了构建任务tasks.json,有两种运行方式可以执行构建任务:

  • 直接按Ctrl+Shift+B(需要将任务设置为默认);
  • 在命令面板中输入task,然后选择运行构建任务;

任务执行后,在集成终端窗口中会显示编译器的输出,指示构建成功或者失败,对于成功的构建,输出如下:
【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_21
在终端输出消息后,按任意键关闭构建消息。

构建任务运行后,如果构建成功,在当前工作区会生成我们在构建任务中指定的可执行程序:
【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_22

双击程序即可运行:
【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_23

7. 启动调试会话

7.1.启动调试

之前在5.3节中已经配置了调试的一些设置,启动调试有两种方式:

  • 直接按F5;
  • 选择调试->启动调试;

7.2.调试界面

启动调试后,VS Code的调试界面如下:
【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_24

终端显示了启动gdb的命令行信息,这些信息不用在意;

因为之前在launch.json中设置了启动后自动停止在main函数的第一行,如图:
【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_25
在代码编辑器的顶部会出现一个调试控制面板:
【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_26

控制面板中的按钮从左到右依次是:

  • 移动按钮:拖住后可以移动调试控制面板;
  • 继续运行(F5);
  • 单步跳过(F10);
  • 单步调试(F11);
  • 单步跳出(Shift+F11);
  • 重启(Ctrl+Shift+F5);
  • 停止调试(Shift+F5);

VS Code的左侧是变量查看窗口,监视查看窗口,堆栈查看窗口:
【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_27

7.3.设置监视

有时候在调试的时候需要跟踪变量的值,可以通过在变量上设置监视完成该操作。

首先修改代码:

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

int main(void)
{
    int i;
    
    printf("Hello World.\n");
    
    for(i = 0; i < 5; i++)
    {
        printf("%d.\n",i);
    }

    system("pause");

    return 0;
}

重新按Ctrl+Shift+B执行构建任务;

然后按F5进入调试;

在监视窗口点击+号,然后输入i查看i:
【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_28

然后在需要暂停处打上断点:
【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_29

然后使用单步调试运行进行调试,在程序暂停时,可以将鼠标悬停在变量处查看该变量这个时刻的值:
【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_30

8. 编译运行后中文乱码问题

在VS Code编写C语言时,经常会遇到中文显示乱码问题,如下:

【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_31

这是因为文件默认是UTF-8编码,在状态栏显示:

【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_32

点击UTF-8切换编码,切换到GBK编码即可:

【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_33

然后重新编译运行即可:

【宇宙最强编辑器VS Code】(四)使用VS Code+ MinGW-W64进行C/C++开发_分享_34