Windows 上配置 VS Code 编写 C 程序
Resources本页面向 Windows 10/11 的 64 位电脑,从未安装 Visual Studio 的情况开始。完成后,你可以在 VS Code 中编写 .c 文件,用 GCC 编译、运行程序,并用 GDB 设置断点。这里使用 MSYS2 的 UCRT64 工具链
;VS Code 负责编辑,C/C++ 扩展负责编辑辅助和连接调试器,它们本身不提供 C 编译器。
下文默认 MSYS2 安装在 C:\msys64。如果你选择了其他目录,后面的路径都要相应修改。本页的 VS Code 配置适用于单个 .c 文件;多个源文件需要单独设置构建方式。
1. 下载并安装 VS Code 和必需插件
从 VS Code 官网 下载 Windows 安装程序,运行安装程序并完成安装。
然后安装本指南要用的插件 C/C++(Microsoft)
,其扩展标识是 ms-vscode.cpptools:
- 打开 VS Code,按 Ctrl+Shift+X 进入“扩展”(Extensions)。
- 在搜索框输入
C/C++,找到发布者为 Microsoft 的 C/C++,单击“安装”(Install)。请核对名称和发布者,不要只凭图标选择同名扩展。 - 安装结束后,在扩展详情页确认显示“已启用”(Enabled)。如果界面提示重新加载窗口,按提示操作。
这个扩展提供 C 代码提示和本页使用的 cppdbg 调试配置。编译和实际调试还需要下一步安装的 GCC、GDB;只安装插件,VS Code 还不能运行 C 程序。
2. 下载并安装 GCC、GDB
从 MSYS2 官网 下载 Windows 安装程序,运行安装程序,安装到默认目录
C:\msys64。安装结束后打开 MSYS2 UCRT64 终端。以下
pacman命令在这个终端中运行,不要输入到 PowerShell。先更新 MSYS2:
pacman -Suy如果更新要求关闭终端,就关闭并重新打开 MSYS2 UCRT64,再运行一次
pacman -Suy,直到更新完成。安装 UCRT64 工具链。出现软件包选择时直接按 Enter 接受默认选择,出现确认提示时输入
Y:pacman -S --needed mingw-w64-ucrt-x86_64-toolchain这个工具链包含本页要用的
gcc.exe和gdb.exe。MSYS2 软件包列表 列出了其组件。
3. 配置编译器路径
在 Windows 开始菜单搜索“编辑账户的环境变量”(也可搜索 Edit environment variables for your account)。打开用户变量中的 Path,新建一项:
C:\msys64\ucrt64\bin
保存后完全退出并重新打开 VS Code,再在 VS Code 中选择“终端 → 新建终端”。以下命令在新终端中运行;本页以 PowerShell 终端为例:
gcc --version
gdb --version
where.exe gcc
where.exe gdb
前两条应显示版本信息;后两条应找到 C:\msys64\ucrt64\bin 下的程序。如果出现“找不到命令”,先检查 Path 是否写到了 ucrt64\bin、工具链是否安装成功,并重新打开 VS Code。不要把 C:\msys64\usr\bin 当作这里的编译器目录。
4. 编译并运行第一个 C 程序
新建一个文件夹,例如 C:\c-course\first-program,在 VS Code 中选择“文件 → 打开文件夹”打开它。新建并保存 hello.c:
#include <stdio.h>
int main(void)
{
int a = 2;
int b = 3;
int sum = a + b;
printf("sum = %d\n", sum);
return 0;
}
打开 VS Code 终端。终端当前位置应是刚才打开的文件夹,然后执行:
gcc -std=c11 -Wall -Wextra -g -O0 hello.c -o hello.exe
.\hello.exe
看到 sum = 5,说明编译和运行成功。第一条命令把 hello.c 编译成 hello.exe;-g 保留调试信息,-O0 便于观察源代码的执行。修改源码后要重新编译,否则运行的仍是旧程序。
5. 配置 VS Code 的构建和调试
在刚才打开的文件夹中创建 .vscode 子文件夹,再创建以下两个文件。它们属于这个练习文件夹,不需要放到 VS Code 的安装目录。
.vscode/tasks.json:编译当前 .c 文件
{
"version": "2.0.0",
"tasks": [
{
"label": "C/C++: gcc.exe build active file",
"type": "process",
"command": "C:\\msys64\\ucrt64\\bin\\gcc.exe",
"args": [
"-std=c11",
"-Wall",
"-Wextra",
"-g",
"-O0",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": ["$gcc"],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
保持 hello.c 为当前打开的编辑器文件,选择“终端 → 运行生成任务”(Terminal → Run Build Task,快捷键 Ctrl+Shift+B),再选择 C/C++: gcc.exe build active file。构建成功后,可在终端运行 .\hello.exe。如果 MSYS2 安装在其他位置,修改 command 中的路径。
.vscode/launch.json:运行并调试
{
"version": "0.2.0",
"configurations": [
{
"name": "C/C++: gcc.exe build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"args": [],
"cwd": "${fileDirname}",
"stopAtEntry": false,
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "C:\\msys64\\ucrt64\\bin\\gdb.exe",
"preLaunchTask": "C/C++: gcc.exe build active file"
}
]
}
6. 通过 VS Code 菜单运行和调试
先保存 hello.c,并让它成为当前打开的编辑器文件。在左侧活动栏打开“运行和调试”(Run and Debug),将顶部的配置选为 C/C++: gcc.exe build and debug active file。下面的两种启动方式共用这个 launch.json 配置;其中的 preLaunchTask 会在启动程序前执行 GCC 构建任务。不用另建一个“不调试运行”配置。
运行程序:不进入调试器
在顶部“运行(Run)”菜单中选择 Run Without Debugging(不调试运行,快捷键 Ctrl+F5)。第一次出现配置选择列表时,即使选项名称含有 debug,仍选择 C/C++: gcc.exe build and debug active file。如果同时看到 Detected Task 和 Default Configuration,这里也选择前述 launch configuration。VS Code 会先编译,再直接运行程序,不会停在断点。
观察 VS Code 下方的集成终端:构建成功后,程序输出 sum = 5。例如把 b = 3 改为 b = 4、保存并再次通过菜单运行,应看到 sum = 6。这样也能检查每次运行前是否编译了新代码。
调试程序:在断点查看变量
- 把示例中的
b改回3并保存。在printf所在行的行号左侧单击,出现红点表示断点已设置。 - 在顶部“运行(Run)”菜单中选择 Start Debugging(启动调试,快捷键 F5)。如果弹出配置选择,仍选 C/C++: gcc.exe build and debug active file。构建完成后,程序会在
printf行暂停。 - 在“运行和调试”侧栏的“变量”(Variables)中查看
a = 2、b = 3和sum = 5。把鼠标移到代码中的sum上,也可以查看当前值。 - 在调试工具栏单击“单步跳过”(Step Over,F10)执行
printf,在集成终端看到sum = 5;再单击“继续”(Continue,F5)让程序结束。需要提前结束调试时,在“运行(Run)”菜单中选择 Stop Debugging(停止调试,Shift+F5)。
externalConsole: false 让程序在 VS Code 的集成终端中运行。后续使用 scanf 的程序也在该终端输入数据。
记住:F5 = 编译并调试;Ctrl+F5 = 编译并直接运行。 两者使用同一个配置,只是启动方式不同。
遇到问题时先检查
gcc或gdb找不到: 返回第 3 步;运行where.exe gcc和where.exe gdb,核对是否指向 UCRT64 目录。- F5 提示找不到
cppdbg调试器: 返回第 1 步,检查 Microsoft 的 C/C++ 扩展是否已安装并启用。 - 按 F5 时提示找不到程序: 确认当前打开的是已保存的
.c文件,并先按 Ctrl+Shift+B 检查编译错误。preLaunchTask的文字必须与tasks.json中的label完全一致。 - 断点不停下或变量看不到: 确认按 F5 启动的是 C/C++: gcc.exe build and debug active file,编译参数中有
-g,且断点设在可执行的代码行。Ctrl+F5会直接运行,不会在断点暂停。修改源码后重新启动调试。 - 程序结果不对: 先确认本次编译成功,再查看常见错误 。
更多界面说明可参考 VS Code 的 MinGW 配置教程
和调试配置说明
。官方示例主要使用 C++ 的 g++;本页为课程中的 .c 文件使用 gcc。