00. 目录
文章目录
在本教程中,将会安装 Visual Studio Code(后简称 VSCode),并在 VSCode 中安装 C/C++ 相关插件, 同时也将 VSCode 配置为使用 MinGW-W64 中的 GCC
C/C++ 编译器(gcc/g++)和 GDB 调试器来创建在 Windows 上运行的程序。配置 VSCode 后,你将编写、编译、运行和调试大多数的 C/C++ 程序。
01. Visual Studio Code概述
Visual Studio Code是一种简化且高效的代码编辑器,同时支持诸如调试,任务执行和版本管理之类的开发操作。它的目标是提供一种快速的编码编译调试工具。然后将其余部分留给IDE。vscode集成了所有一款现代编辑器所应该具备的特性,包括语法高亮、可定制的热键绑定、括号匹配、以及代码片段收集等。
Visual Studio Code(简称VSCode)是Microsoft开发的代码编辑器,它支持Windows,Linux和macOS等操作系统以及开源代码。它支持测试,并具有内置的Git版本控制功能以及开发环境功能,例如代码完成(类似于IntelliSense),代码段和代码重构等。编辑器支持用户定制的配置,例如仍在编辑器中时,可以更改各种属性和参数,例如主题颜色,键盘快捷键等,内置的扩展程序管理功能。
跨平台支持
支持 Windows、macOS 和 Linux 系统,提供一致的开发体验。
智能代码编辑
- 语法高亮、自动补全(IntelliSense)、代码片段、错误检查等。
- 内置 Git 版本控制,可直接提交代码、解决冲突。
- 调试工具 支持断点、变量监控和逐行调试。
可扩展性
- 通过插件市场(Marketplace)安装扩展,支持语言(Python、Java、C++ 等)、框架(React、Vue、Django 等)、主题和工具。
- 集成终端,可直接运行命令行操作。
远程开发
通过 Remote Development 扩展,可连接远程服务器、容器或 WSL(Windows Subsystem for Linux),实现云端或本地跨环境开发。
高度可定制
支持自定义快捷键、主题、布局和工作区配置,适配个人开发习惯。
优势
- 轻量快速:启动速度快,资源占用低,适合低配设备。
- 免费开源:无功能限制,社区持续更新优化。
- 强大生态:超过数万款插件,覆盖几乎所有开发需求。
- 多语言支持:通过语言服务器协议(LSP)提供智能代码分析。
适用场景
- 前端开发:集成 Emmet、Live Server 等工具,快速构建网页。
- 全栈开发:支持 Node.js、数据库扩展和后端框架。
- 数据科学与机器学习:Jupyter Notebook 集成、Python 数据分析。
- 教育与学习:轻量易用,适合编程初学者。
- 云原生开发:通过 Docker 和 Kubernetes 扩展管理容器化应用。
02. Visual Studio Code下载
官网下载:https://code.visualstudio.com/Download
快速下载:VSCodeSetup-x64-1.98.2.rar
03. Visual Studio Code安装
教程:【Tools】Visual Studio Code安装保姆级教程(2025版)
04. Mingw-w64概述
MinGW-W64(Minimalist GNU for Windows 64)是Windows平台的开源GNU工具链,基于GCC(GNU Compiler Collection),提供在Windows上编译原生32/64位应用程序的能力。它是原MinGW项目的增强分支,支持更广泛的Windows API和现代编程标准。
核心功能
(1) 跨架构支持
- 同时支持生成 32位(x86) 和 64位(x86_64) Windows可执行文件(PE格式)。
- 提供多种异常处理模型(如SJLJ、SEH、Dwarf)。
(2) 编译器与工具链
- 包含 GCC(C/C++/Fortran等)、GDB(调试器)、Binutils(链接器/汇编器)。
- 支持C++11/14/17/20标准及OpenMP并行编程。
(3) API兼容性
- 完整支持 Windows API(Win32、DirectX等)和部分 POSIX兼容层(如pthread线程库)。
- 可调用MSVC编译的库(需处理ABI兼容性问题)。
(4) 跨平台开发
- 生成不依赖第三方运行库的独立EXE文件。
- 结合CMake/Makefile实现跨平台构建。
优势与特点
- 开源免费:遵循GPL协议,无商业授权限制。
- 轻量化:相比Visual Studio,占用资源少,适合低配置环境。
- 生态丰富:兼容大多数GNU工具和开源库(如OpenSSL、SDL2)。
- 灵活定制:可自定义编译选项(静态链接、调试符号等)。
对比其他工具
工具 | MinGW-W64 | MSVC(Visual Studio) | Cygwin |
---|---|---|---|
目标平台 | 原生Windows | 原生Windows | POSIX兼容层模拟 |
性能 | 接近原生 | 高度优化 | 因兼容层存在性能损耗 |
依赖库 | 需手动链接Windows API | 集成Windows SDK | 依赖Cygwin DLL |
适用场景 | 跨平台开发/轻量化编译 | 大型Windows项目 | Linux工具移植 |
典型应用场景
(1) 跨平台项目移植
将Linux C/C++项目(如FFmpeg、Python扩展)编译为Windows版本。
(2) 游戏开发
配合OpenGL/SDL等库开发轻量级游戏。
(3) 教育与研究
高校教学中替代Turbo C等老旧工具,支持现代C++特性。
(4) 工具链构建
为VSCode、CLion等编辑器提供后端编译环境。
05. Mingw-w64下载
MinGW-w64 的安装包,我们安装的 MinGW 版本是 11.0,对应的GCC版本为13.2.0。
官网下载:https://www.mingw-w64.org/
平台下载:mingw64.zip
MinGW版本:
- x86_64-posix-sjlj
- x86_64-posix-seh
- x86_64-win32-sjlj
- x86_64-win32-seh
- i686-posix-sjlj
- i686-posix-dwarf
- i686-win32-sjlj
- i686-win32-dwarf
DWARF:一种带调试信息的包, 所以比一般的包尺寸大,仅支持32位系统。dwarf 的性能要优于 sjlj。
SJLJ:跨平台,支持32、64位系统,稳定性好。缺点是:运行速度稍慢,GCC不支持。sjlj支持32、64两种编译,需加-m32或-m64参数。
SEH:性能较好,调用系统机制处理异常,支持32,64位系统,缺点是:GCC不支持。
posix: 开发 Linux、Unix、Mac OS 等操作系统下的程序,启用了C++ 11 多线程特性。
win32: 开发 Windows 程序,未启用C++ 11 多线程特性。
06. Mingw-w64配置
我们安装的 MinGW 版本是 11.0,对应的GCC版本为13.2.0。
6.1 将mingw64.zip解压到指定目录下,比如作者的路径为D:\tools\mingw64
6.2 进入mingw64文件夹下的bin文件夹,复制当前路径。
6.3 在最底部的任务栏搜索框中搜索“高级系统设置”
注意,如果在最底部的任务栏中没有看到搜索框,请点击“windows”键。
Ø 如果是windows 10 系统,请在弹出开始菜单之后直接打字,搜索框会自动出现。
Ø 如果是 windows 11 系统,搜索框会在开始菜单顶部。
6.4 进入高级系统设置之后,点击“环境变量”按钮。
6.5 双击“Path”。
6.6 点击“新建”,粘贴前面复制的 MinGW 路径地址,连按三个“确定”(包括前面打开的两个窗口,也需要点击“确定”)。
07. Mingw-w64测试
7.1 按组合键Win + r
之后,输入cmd
回车。
7.2 回车之后,就可以调出 CMD 的终端窗口了,然后分别输入下面的命令,每输入一次命令后回车一次。
gcc --version
g++ --version
gdb --version
出现如下图一样的信息,就说明 C/C++ 的编译环境已经安装好。
08. Visual Studio Code插件
4.1 安装中文插件
中文插件非必须安装插件,考虑到很多同学的英文水平可能不是很好,对于全英文的开发环境会犯难,这里可以使用 VS Code 自带的汉化插件来解决这个问题。
安装好之后,点击右下角按钮重启就是中文的界面了
4.2 安装 C/C++ 扩展包
选择“C/C++ Extension Pack”,它是 VS Code 官方推荐的工具包,包含了开发 C/C++ 所需要的多个扩展。
09. Visual Studio Code测试(单文件)
9.1 创建工程目录
VSCode 是一款基于文件夹进行代码编辑和管理的编辑器,通常我们会把新建一个文件夹来管理同一个项目的代码,并在 VSCode 中打开。
我新建了一个名为WorkSpace
的文件夹,并在里面新建了一个用于专门放 C 语言代码的文件夹。
需要注意的是,这个路径最好不要存在中文,否则会出现编译失败等问题。
9.2 打开 VSCode,点击打开文件夹
的按钮。
9.3 在弹窗中找到刚刚新建的C
文件夹,选中文件夹,再点选择文件夹
。
9.4 选中文件夹后,在新弹出的窗口中,勾选上信任父文件夹"Documents"中所有文件的作者
,再点是,我信任此作者
。
9.5 文件添加好后,在左边的资源管理器中会出现CODE
文件夹以及子文件夹C
,把鼠标放在文件夹上面,会出现四个小图标。四个小图标从左往右的作用分别是新建文件、新建文件夹、刷新资源管理器以及在资源管理器中折叠文件夹。
做到这一步,接下来就可以进行代码的运行和调试了。
9.6 为了方便管理代码,我们先选中C
文件夹,再点击新建文件夹
按钮。
9.7 此时会在C
文件夹的下级出现一个输入框,我们新建一个名为test
的文件夹。
9.8 鼠标右键test
文件夹,在弹出的菜单中选择新建文件
。
9.9 在输入框中输入我们接下来要进行调试代码文件名,命名为test.c
,注意,一定要是 .c 结尾。
9.10 接下来就可以输入一个调试程序了,保存到test.c文件中,我的代码如下:
#include <stdio.h>
int main(void)
{
for(int i = 0; i < 10; i++)
{
printf("Hello World\n");
}
return 0;
}
9.11 写好测试代码后,点击右上角的调试按钮,这时会弹出调试程序的选项,选择第一个,也是本教程前面安装的 gcc 编译工具。
9.12 运行结果如图所示。
9.13 如果要进行简单的断点调试,可以在行号前加一个断点,操作也很简单,只需用鼠标左键点一下行号左边的空白处即可。如下图所示,是在第8行处加了一个断点。
9.14 这时再去运行程序,搜索框下面就会出现调试的面板,面板上有六个按钮,分别是继续、逐过程、单步调试、单步跳出、重启和停止。
说明:
以下是 VS Code 中的 C 语言代码调试面板功能的解释:
(1) 继续(Continue):继续执行程序,直到遇到下一个断点或程序结束。
(2) 逐过程(Step Over):逐行执行当前行,如果当前行是函数调用,则进入该函数并执行完毕。
(3) 单步调试(Step Into):逐行执行当前行,如果当前行是函数调用,则进入该函数并停在函数内的第一行。
(4) 单步跳出(Step Out):执行完当前函数的剩余部分,并停在当前函数被调用的下一行。
(5) 重启(Restart):重新启动程序的调试会话,即从程序的起点开始执行。
(6) 停止(Stop):停止程序的调试会话,结束调试过程并关闭程序执行。
10. Visual Studio Code测试(多文件)
如果想要进行多个 .c 文件编译后的调试,就需要进行一些配置修改。如果进行过一次编译运行,我们会发现在资源管理器的C
文件夹下,多出一个.vscode
的文件夹,这个文件夹里面有个tasks.json
的文件
10.1 文件夹里面有个tasks.json
的文件
这个文件是用于定义任务配置,这些任务可以在 VS Code 中运行,例如编译代码、运行测试、启动调试器等。tasks.json文件是一个 JSON 格式的文件,其中包含了任务的配置信息,包括任务名称、命令、参数等。通过编辑tasks.json文件,我们可以自定义项目中的各种任务,并在 VS Code 中方便地执行这些任务。
当前的 VS Code 的运行效果还不是很理想,双击打开tasks.json文件修改一下编译运行功能。下图是对该 JSON 文件做了部分解释。
10.2 修改tasks.json文件
具体修改如下图所示,我注释掉了原来的" f i l e " ,并新增一行 " ∗ . c " ,表示并非指定某一个 . c 文件,而是当前文件夹下所有的 . c 文件。同时也把 " {file}",并新增一行"*.c",表示并非指定某一个 .c 文件,而是当前文件夹下所有的 .c 文件。同时也把" file",并新增一行"∗.c",表示并非指定某一个.c文件,而是当前文件夹下所有的.c文件。同时也把"{fileDirname}\ f i l e B a s e n a m e N o E x t e n s i o n . e x e " 注释掉,改成 " {fileBasenameNoExtension}.exe"注释掉,改成" fileBasenameNoExtension.exe"注释掉,改成"{fileDirname}\program.exe",那么多个 .c 文件编译之后的可执行文件就是program.exe。
修改好后,按组合键Ctrl + s
保存即可。
10.3 然后点击左侧的运行与调试
,再点击创建launch.json文件
。
10.4 搜索框会弹出选项,选择C++(GDB/LLDB)
。
10.5 然后 VS Code 会新建一个 JSON 文件,点击右下角的添加配置
,在弹出的下拉菜单中选择C/C++:(gdb)启动
。
10.6 此时,JSON 文件会多出一些配置信息,需要我们修改的内容如下图所示的红框标志内容。
10.7 修改为下图红框所示内容,“program”
后的内容就是前面提到的tasks.json
文件中的编译后产生的可执行文件。"miDebuggerPath"
后面的则是前面安装的 MinGW-W64 的 gdb 工具的路径。修改后保持关闭。
在复制粘贴 gdb 的路径时,不少小伙伴会忽略掉下图所示的问题。反斜杠是转义字符的作用,应该像上图一样多加一个一个反斜杠才表示路径。
10.8 我们进行多文件的编译调试,先在C
文件夹下新建一个新的文件夹,我这里命名为test2
,并在这个文件夹里面新建三个文件,分别是test.c
、max.h
和max.c
。
10.9 代码如下
max.h
#ifndef __MAX_H__
#define __MAX_H__
#include <stdio.h>
int findMaxNum(int num1, int num2);
#endif // __MAX_H__
max.c
#include "max.h"
int findMaxNum(int num1, int num2)
{
return num1 > num2 ? num1 : num2;
}
test.c
#include <stdio.h>
#include "max.h"
int main()
{
int a = 10;
int b = 20;
int c = findMaxNum(a, b);
printf("%d\n", c);
return 0;
}
10.10 代码写好后,给test.c
的第 8 行代码打一个断点,再点调试按钮旁边的小三角形,在下拉菜单中选择调试C/C++文件
。
10.11 调试面板依旧是之前的那个。如果点击继续
,调试过程会跳到下一个断点,不过我们这个程序只打了一个断点,所以会直接运行到程序结束并退出调试。
如果点击单步调试
,则会进入被调用函数的内部,继续点击单步调试
会一步一步执行并返回。如果进入函数后,点击单步跳出
则直接带着函数的执行结果返回被调用处。
11. 讨论
tasks.json文件描述
参数名 | 功能 |
---|---|
type | 编译环境类型。 |
label | 当前任务名,可自行设置。 |
args | 编译选项,包括所的编译文件、保存编译文件的目录等。 |
command | 编译器所在的绝对路径。 |
options-cwd | 编译器所在目录 |
此文件主要是告知VScode如何构建(编译)源代码,用于编译设置。
打开方法:在命令面板输入tasks,选择如下如下红色矩形部分,即可打开task.json文件。
launch.json文件描述
此文件主要主要是告知VScode如何调试程序,用于自定义调试。
打开方法:命令面板输入launch.json可打开launch.json文件。
c_cpp_properties.json文件
此文件用于配置编译器、头文件路径、C\C++标准(默认C\C++17)等。
打开方法:进入命令面板(Ctrl + Shift + P),输入:edit,如下:
顶层属性
参数名 | 功能 |
---|---|
env | 用户自定义变量 |
configuration | 定义编译器、头文件、C\C++标准 |
version | c_cpp_properties.json文件版本,不可修改。 |
configuration属性
参数名 | 功能 |
---|---|
compilerPath | 编译器的完整路径 |
intelliSenseMode | 指定intelliSense的模式 |
includePath | 指定包含头文件的目录 |
cStandard | 指定C语言标准的版本 |
cppStandard | 指定C++语言标准的版本 |
预定义变量(Predefined variables)说明
${userHome} - 计算机用户文件夹路径
${workspaceFolder} - VScode中打开的文件夹路径
${workspaceFolderBasename} - 在VScode中打开的文件夹名称
${file} - 当前打开的文件
${fileWorkspaceFolder} - 当前打开文件的工作空间文件夹
${relativeFile} - 相对于workspaceFolder的当前打开文件
${relativeFileDirname} - 当前打开的文件相对于工作空间的目录名
${fileBasename} - 当前打开文件名
${fileBasenameNoExtension} - 当前打开文件的基本名称,不包括文件扩展名
${fileDirname} - 当前打开文件的路径
${fileExtname} - 当前打开文件的扩展名
${cwd} - 启动VScode时,任务运行期的当前工作目录
${lineNumber} - 当前选定活动文件中的行数
${selectedText} - 当前活动文件选择的文本
${execPath} - 正在运行VScode可执行文件的路径
${defaultBuildTask} - 默认构建任务的名称
${pathSeparator} - 操作系统用来分隔文件路径中的组件的字符
${env:Name} - 计算机的环境变量
示例:
当前被打开的文件路径:/home/your-username/your-project/folder/file.c
工作空间根目录:/home/your-username/your-projec
预定义变量对应值如下:
${userHome} -/home/your-username
${workspaceFolder} -/home/your-username/your-project
${workspaceFolderBasename} -your-project
${file} -/home/your-username/your-project/folder/file.c
${fileWorkspaceFolder} -/home/your-username/your-project
${relativeFile} -folder/file.c
${relativeFileDirname} -folder
${fileBasename} -file.c
${fileBasenameNoExtension} -file
${fileDirname} -/home/your-username/your-project/folder
${fileExtname} -.c
${lineNumber} - 光标的行号
${selectedText} - 在代码编辑器中选择的文本
${execPath} - Code.exe 的位置
${pathSeparator} -/在 macOS 或 linux 上,\在 Windows 上
12. 附录
参考:Visual Studio Code documentation
参考:Visual Studio Code on Windows
参考:C/C++ for Visual Studio Code
参考:VS Code 配置 C/C++ 编程运行环境(保姆级教程)
下载:WinLibs standalone build of GCC and MinGW-w64 for Windows
下载:mingw64.zip