Visual Studio Code C/C++ 环境配置教程

写在前面

Visual Studio Code(简称 VS Code)是一款轻量、高效、美观的跨平台源代码编辑器。它内置了对 JavaScript、TypeScript 和 Node.js 的支持,并为其他语言(如 C++、C#、Java、Python、PHP、Go)和运行时(如 .NET 和 Unity)提供了丰富的扩展生态系统。

在程序设计竞赛中,C++ 是每一位选手必须掌握的编程语言。本文将介绍如何为 Visual Studio Code 配置 C/C++ 环境。

安装 C/C++ 环境

VS Code 是一个 Editor(编辑器)而非 IDE(集成开发环境),所以想要 VS Code 能够编译或调试 C/C++ 程序,需要额外安装 C/C++ 环境。

安装环境的方案有很多,主要分为两种:

  • 单独安装编译器,这样可以自由指定安装的编译器的版本。

  • 使用 IDE 的环境,如 Dev-C++、Code::Blocks、Visual Studio 等。

本文将采取第一种方案:从 Winlibs 获取 GCC 和 MinGW-w64,并为其配置环境变量。

官网:WinLibs standalone build of GCC and MinGW-w64 for Windows

直接下载 Win64 | without LLVM/Clang/LLD/LLDB | Zip archive 版本的安装包即可。然后我们将其解压到 C 盘下的 Program Files 文件夹中,确保解压后路径为 C:\Program Files\mingw64

配置环境变量

配置环境变量的成功标准是能否在命令行中调用 g++

步骤如下:

  1. 快捷键 win + r 打开运行栏,键入 SYSDM.CPL 并回车。即可打开「系统属性(System Properties)」页面。
  2. 依次点击「高级(Advanced)」标签、「环境变量(Environment Variables)」按钮,即可打开「环境变量(Environment Variables)」页面。
  3. 双击「系统变量(Systeam Variables)」栏的 Path 字段,即可打开「编辑环境变量(Edit environment variables)」页面。
  4. 点击「新建(New)」,输入编译器路径(C:\Program Files\mingw64\bin),点击「确定(OK)」即可。

检验环境变量是否配置成功,可以在命令行窗口中键入 g++ --version 并回车。如果显示能够显示 g++ 的版本信息就说明配置成功了。

修改环境变量不会对已经启动的终端生效,因此修改完成后需要重启终端。同理 VS Code 也需要重启。

安装 VS Code

可以在官网下载,也可以在 Microsoft Store 中安装,也可以使用 WinGet 进行安装。

官网:Visual Studio Code

VS Code 安装 C/C++ 插件

点击左侧「扩展(Extensions)」进入应用商店,搜索 C/C++ 进行安装(发布者为 Microsoft)。

VS Code 可以通过安装插件来设置显示语言为中文(如果你需要的话),插件名为 Chinese (Simplified) Language Pack for Visual Studio Code

VS Code 创建项目文件夹

参考:Using GCC with MinGW

Dev-C++ 可以直接编译或调试单文件,但 VS Code 的调试只能在打开的文件夹中进行。你需要建立一个「项目文件夹」,以后调试就在这个「项目文件夹」中进行。

MinGW 的 GDB 不能调试中文路径的程序,因此请尽量避免使用中文路径名。以下两种情况请特别注意:

  1. 用户文件夹名为中文,而你的项目恰好在桌面文件夹、文档等目录下。如:C:\Users\柏咕咕\Desktop\Project

  2. 程序文件名为中文,文件名也被视为路径的一部分。如:C:\Users\0xfaner\Desktop\Project\作业.cpp

推荐在用户目录(例如:C:\Users\0xfaner)下新建 workspace 文件夹,作为所有的项目的总文件夹。每次需要新建项目时,可以直接在 workspace 文件夹下新建文件夹,并使用 VS Code 打开。

假定「项目文件夹」为 cpp-space,路径为 C:\Users\0xfaner\workspace\cpp-space。在 VS Code 中依次点击「文件(File)」和「打开文件夹(Open File)」,选择 cpp-space 即可打开文件夹。

VS Code 创建配置文件

接下来我们在项目中新建配置文件(资源管理器或者 VS Code 都可以新建),结构目录如下:

1
2
3
4
5
6
.
└── cpp-space
├── test.cpp
└── .vscode
├── launch.json
└── tasks.json

以下是分别对应的文件的内容,直接复制粘贴即可。

tasks.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
"version": "2.0.0",
"tasks": [
{
"label": "g++ build",
"command": "C:\\Program Files\\mingw64\\bin\\g++.exe",
"args": [
"-fdiagnostics-color=always",
"-Wfatal-errors",
"-Wextra",
"-Wall",
"-g",
"${relativeFile}",
"-o",
"${relativeFileDirname}\\${fileBasenameNoExtension}.exe",
"-std=c++11"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
]
}
]
}
launch.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
{
"version": "0.2.0",
"configurations": [
{
"name": "(GDB) Launch & Pause",
"type": "cppdbg",
"request": "launch",
"program": "C:\\Windows\\System32\\cmd.exe",
"args": [
"/C",
"${relativeFileDirname}\\${fileBasenameNoExtension}.exe",
"&",
"pause"
],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "C:\\Program Files\\mingw64\\bin\\gdb.exe",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "g++ build",
},
{
"name": "(GDB) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "C:\\Program Files\\mingw64\\bin\\gdb.exe",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "g++ build",
}
]
}
test.cpp
1
2
3
4
5
6
7
8
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
cout << a + b << endl;
return 0;
}

配置文件中包含了编译器路径:tasks.json 中的 command 字段和 launch.json 中的两个 miDebuggerPath 字段。如果你将编译器安装到了其他路径,那么你需要修改这两个字段的值。

具体地,你需要把 C:\\Program Files\\mingw64\\bin\\ 替换为实际的编译器路径。以 Dev-C++ 的编译器路径为例,miDebuggerPath 字段的值应为 C:\\Program Files\\Dev-C++\\MinGW64\\bin\\gdb.exe

配置完成后我们在 test.cpp 的代码页按 F5,即可编译并运行程序。我们在弹出的窗口键入 1 2,在第二行出现了 3,说明配置成功!

实际上该配置文件中包含两种运行方案,你可以在 VS Code 最左侧的「运行与调试(Run and Debug)」栏中切换方案。两种方案的区别会在下文进行解释。

配置文件的解释

tasks.json

tasks.json 用于描述任务,这里我们只添加了一个任务:g++ build,用于生成可执行文件。

注意看 tasks.jsoncommand args 字段,实际上对应了如下命令。

1
C:\Program Files\mingw64\bin\g++.exe -fdiagnostics-color=always -Wfatal-errors -Wextra -Wall -g Code.cpp -o .\Code.exe -std=c++11

这个命令就是我们手写编译时的命令,解释一下部分编译选项:

  • -fdiagnostics-color=always:显示彩色诊断信息。

  • -Wfatal-errors:让编译器在遇到第一个错误时中止编译,而不是尝试继续并打印进一步的错误消息。

  • -Wextra:对于部分事件打印额外的警告信息。

  • -Wall:启用更多更严格的警告信息。

  • -g: 编译器在编译时产生调试信息。

  • -std=c++11:使用 C++11 标准。

launch.json

launch.json 文件用于配置调试器,这里我们添加了两个任务:(GDB) Launch & Pause(GDB) Launch,分别代表 release 和 debug 模式下的运行。

当我们无需进行调试的时候,我们可以使用 (GDB) Launch & Pause,程序运行结束后还要再按一次按键才会退出窗口。这和 Dev-C++ 的表现一致。

当我们需要调试时,我们可以使用 (GDB) Launch,此时 VS Code 中设置的断点将会生效,并支持单步调试。

解释一下配置文件的部分字段:

  • programargs:调用的程序和给定的参数。

  • preLaunchTask:调试器启动前执行的任务,这里执行的任务就是 tasks.json 的任务,需要保证该字段的值在 tasks.json 中有对应的 label

  • cwd:调试器启动时的工作目录,这里设置为「项目文件夹」。