VS Code 配置 C++ 环境

如果想要在自己的电脑上编写并运行 C++ 程序,我们首先需要把本地开发环境搭建起来才行。

对于初学者来说,推荐使用主流的 VS Code(Visual Studio Code)作为代码编辑器,再配合 MSYS2 安装 MinGW-w64(GCC)编译器。在配置的过程中,小伙伴们不要图快,严格把每一步都落实到位,就能一次配置成功。

“编辑器” 与 “编译器” 的区别

第一次搭建环境时,很多小伙伴容易搞混一件事:有人只装了 VS Code,发现代码根本运行不了;有人装了编译器,又不知道去哪里写代码。其实,这是因为 “编辑器” 和 “编译器” 负责的是两件不同的工作。

VS Code 只是一个代码编辑器。说白了,它就像一个专门用来写代码的 “高级记事本”,主要提供语法高亮、代码自动补全和文件管理功能,方便我们编写代码。

但 C++ 是一门编译型语言,我们编写的 .cpp 源代码文件,计算机是没法直接执行的,必须先交给 C++ 编译器翻译成 .exe 等可执行程序才行。而 VS Code 本身并不自带 C++ 编译器。

因此,在 Windows 系统中配置完整的 C++ 开发环境,我们需要准备以下 3 样工具:

  • VS Code 编辑器:用来编写和管理 C++ 源代码文件。
  • C/C++ 扩展插件:安装在 VS Code 内部的语法插件,用来提供代码提示、语法检查、跳转和调试支持,注意它本身并不是编译器。
  • MinGW-w64(GCC)工具链:真正的 C++ 编译工具包,包含 g++ 编译器和调试器,负责把源代码翻译成可执行程序。

安装与配置 VS Code

接下来,我们先来下载并安装 VS Code 编辑器,再把开发所需的扩展插件装好。

1. 下载与安装 VS Code

首先打开 VS Code 官方下载页面,根据自己的操作系统选择对应的版本下载即可,如下图所示。

下载 VS Code

VS Code 的安装过程和普通软件一样简单。双击打开安装包,先勾选【我同意此协议】,随后保持默认选项一路点击【下一步】按钮即可。如果不希望占用 C 盘空间,也可以在安装时修改到其他磁盘。安装完成后启动 VS Code,能够正常进入主界面就说明编辑器安装好了。

2. 安装扩展插件

刚安装好的 VS Code 默认是英文界面,并且还没有安装 C++ 语言支持功能。为了方便后续编写代码,我们需要安装以下 2 个扩展插件:

  • Chinese (Simplified):简体中文语言包,用来把 VS Code 的菜单和提示汉化成中文。
  • C/C++:微软官方提供的 C/C++ 语言支持扩展,用来提供语法高亮、智能补全、错误波浪线提示与代码调试功能。

在 VS Code 中安装插件非常简单。点击界面左侧边栏的【扩展】图标(或按下快捷键 Ctrl + Shift + X),在顶部搜索框中输入插件英文名称,找到后点击【Install】(汉化后显示为【安装】)按钮即可,如下图所示。

VS Code 安装插件

安装完简体中文语言包后,右下角会弹出一个提示框,点击【Change Language and Restart】按钮重启 VS Code,界面就会切换成中文了。

需要注意的是,装好【C/C++】扩展只代表编辑器认识 C++ 语法了,接下来我们还需要安装真正的编译器才能运行程序。

安装与配置 C++ 编译器

这里我们采用业界主流的 GCC 编译工具集,其中负责编译 C++ 代码的程序叫 g++。MinGW-w64 是 GCC 在 Windows 系统上的移植版本,而下面要安装的 MSYS2,则是帮我们一键下载和管理 MinGW-w64 的软件管理器。

1. 安装 MSYS2

① 下载 MSYS2:首先打开 MSYS2 官方网站,下载首页提供的 64 位安装程序并双击运行,如下图所示。

下载 MSYS2 安装程序

② 安装 MSYS2:在安装向导中,安装路径建议直接保留默认的 C:\msys64,注意路径中不要包含中文或空格。一路点击【Next】按钮完成安装后,保持勾选界面上的【Run MSYS2 now.】选项,再点击【Finish】按钮,如下图所示。

完成 MSYS2 安装并启动终端

点击【Finish】之后,会自动弹出一个黑色的 MSYS2 终端窗口。注意,这里先不要把这个终端窗口关闭。

2. 安装 MinGW-w64 工具链

刚刚弹出的 “终端” 窗口,就是一个通过输入命令让电脑执行任务的界面。如果不小心关掉了它,可以在 Windows 开始菜单中找到并打开【MSYS2 UCRT64】。MSYS2 会生成几个名称相近的快捷方式,我们全程认准带 “UCRT64” 字样的这一个即可。

在打开的终端窗口中输入下面这条命令,然后按下 Enter 键执行。由于该终端默认不支持快捷键(Ctrl + V)粘贴,建议直接复制命令后,在窗口内点击鼠标右键选择【Paste】粘贴,避免手动敲错字母:

pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain

执行命令后,终端会分两次询问我们。第 1 次询问要安装工具链里的哪些软件包,直接按下 Enter 键选择默认全部安装即可。第 2 次出现 “[Y/n]” 询问是否继续安装时,输入字母 “y” 再按下 Enter 键,如下图所示。

输入 y 确认安装 MinGW-w64 工具链

这一步会自动下载并安装 g++ 编译器和 GDB 调试器等工具,整个过程通常需要几分钟,耐心等待即可。需要特别注意,如果下载中途因为网络波动出现报错中断(如下图所示),重新执行一次上面的命令就行,它会自动跳过已经下载好的部分继续安装。

下载中断报错时重新执行安装命令

等安装进度跑完、终端重新回到可以输入命令的状态后,我们可以打开电脑的文件资源管理器,去 C:\msys64\ucrt64\bin 目录下看一眼。只要里面已经有了 g++.exe 文件,就说明编译工具链安装成功了,如下图所示。

确认 bin 目录下已生成 g++.exe

3. 配置 Path 环境变量

编译器安装完成后,还需要配置环境变量才行。这是因为电脑硬盘里有成千上万个文件夹,当我们在终端输入 g++ 命令时,Windows 不会把整个硬盘翻一遍去找 g++.exe,而是只去【Path】环境变量登记过的那几个文件夹里查找。

把编译器所在的文件夹路径加进环境变量,目的就是为了可以在任意目录下直接使用 g++ 命令。如果前面安装 MSYS2 时保留了默认路径,那么 g++ 所在的文件夹路径就是:

C:\msys64\ucrt64\bin

接下来,我们按照以下 3 步将该路径添加到环境变量中:

① 打开系统属性窗口:在电脑任务栏搜索框中搜索 “环境变量”,点击打开【编辑系统环境变量】,如下图所示。如果找不到搜索框,也可以右键点击【此电脑】→【属性】→【高级系统设置】打开同一窗口。

搜索并打开编辑系统环境变量

② 打开环境变量列表:在弹出的【系统属性】窗口中,切换到【高级】选项卡,再点击右下角的【环境变量】按钮,如下图所示。

点击系统属性中的环境变量按钮

接着在【用户变量】一栏中,先单击选中【Path】这一项,再点击下方的【编辑】按钮,如下图所示。

选中 Path 变量并点击编辑

③ 新建环境变量:在弹出的编辑窗口中,点击右侧的【新建】按钮,把上面的 C:\msys64\ucrt64\bin 路径完整粘贴进去。添加完成后点击【确定】按钮,如下图所示。注意一定要点击【新建】追加一行,不要覆盖或误删里面原有的其他路径。

新建并添加编译器 bin 路径

如果在安装 MSYS2 时修改过默认目录,这里记得填写实际安装目录下的 ucrt64\bin 路径。填写完成后,依次点击所有已打开窗口的【确定】按钮保存设置,注意不要直接点击窗口右上角的关闭按钮,否则配置不会生效。

此外,如果之前已经打开了 VS Code、命令提示符(CMD)或 PowerShell,记得将它们全部关闭后再重新打开,这样新的环境变量才会生效。前面的 MSYS2 终端到这里就用完了,直接关掉即可,后续所有操作我们统一在 VS Code 自带的终端里完成。

4. 验证编译器安装

那么怎么验证编译器已经配置成功了呢?重新打开 VS Code,在顶部菜单栏中依次点击【...】→【终端】→【新建终端】(如果窗口较宽,直接点击顶部的【终端】→【新建终端】即可),如下图所示。

在 VS Code 中打开新建终端

接着在下方的终端窗口中输入以下命令并按下 Enter 键:

g++ --version

正常情况下,终端会打印出 g++ 的版本号及相关说明,如下图所示。电脑上显示的具体版本号不需要和图中完全一致,只要能正常看到版本信息,就说明 C++ 编译环境已经配置成功了。

验证 g++ 编译器版本

提示 如果你使用的是 macOS 系统,可以在终端执行 xcode-select --install 安装命令行工具,后续使用 clang++ 编译代码。如果是 Ubuntu 等 Linux 系统,直接通过包管理器安装 GCC 和 GDB 即可。

创建并运行第一个 C++ 程序

编译器验证通过后,我们来创建第一个真正保存在本地硬盘上的 C++ 源文件,亲手把 “编写代码 → 编译 → 运行” 的流程走通。

1. 创建 hello.cpp

按照以下 4 个步骤,在 VS Code 中创建并保存源代码文件:

① 创建项目:在电脑上新建一个专门用来存放学习代码的文件夹,例如命名为 cpp-test,注意文件夹路径不要包含中文或空格。在日常开发中,一个文件夹就相当于一个项目。

接着打开 VS Code,在左上角依次点击【文件】→【打开文件夹】,选中刚刚创建的 cpp-test 文件夹。如果弹出询问是否信任作者的窗口,点击【是,我信任此作者】即可。打开 cpp-test 文件夹后的界面如下图所示。

在 VS Code 中打开项目文件夹

② 新建代码文件:在左侧资源管理器面板的空白处点击鼠标右键,然后选择【新建文件】,如下图所示。

右键点击空白处新建代码文件

我们将文件命名为 hello.cpp 并按下 Enter 键确认,其中 .cpp 是 C++ 源文件的标准后缀名。创建完成后,可以看到项目根目录下多出了 hello.cpp 文件,如下图所示。另外,如果列表里出现了 .vscode 文件夹,它是编辑器自动生成的配置目录,这里不用管它。

创建完成的 hello.cpp 文件

③ 写入代码:把下面的代码完整输入到 hello.cpp 中(也可以直接复制粘贴进去):

#include <iostream>

int main() {
    std::cout << "Hello, C++!";
    return 0;
}

代码输入完成后的界面如下图所示。

在 hello.cpp 中编写代码

④ 保存代码文件:写完代码后,按下快捷键(Ctrl + S)保存文件。如果文件名标签右侧有一个白色小圆点(如下图所示),说明修改后尚未保存。按下保存快捷键后小圆点消失,才代表真正保存成功。

文件名右侧圆点表示尚未保存

注意 编写或修改代码后,一定要先按下快捷键(Ctrl + S)保存文件再去编译。很多初学的小伙伴改完代码忘了保存就开始编译,结果排查半天才发现是没有保存代码导致的。

2. 编译程序

确认 hello.cpp 已经保存后,查看 VS Code 下方的终端窗口。如果刚才关掉了终端,可以点击顶部【...】→【终端】→【新建终端】重新打开,并确认终端路径末尾显示的是刚刚打开的 cpp-test 文件夹。

接着,我们在终端中输入以下编译命令并按下 Enter 键执行:

g++ -std=c++20 hello.cpp -o hello.exe

终端中输入编译命令的位置如下图所示。

在终端执行 g++ 编译命令

这条编译命令由以下 4 个部分组成,各自的作用如下:

  • g++:调用刚刚安装的 C++ 编译器。
  • -std=c++20:用来指定 C++ 标准版本,这里表示按 C++20 规则编译代码。
  • hello.cpp:指定要编译的源代码文件。
  • -o hello.exe:其中 -o 是 “output(输出)” 的意思,表示把生成的可执行程序命名为 hello.exe。

需要注意的是,编译成功时终端不会额外打印 “编译成功” 的提示。只要命令执行后没有报错,并且左侧文件列表里多出了一个 hello.exe 文件(如下图所示),就说明从 .cpp 源文件到 .exe 程序的编译与链接已经顺利完成了。

编译后生成的 hello.exe 文件

3. 运行程序

编译生成 hello.exe 之后,继续在终端中输入下面这条命令并按下 Enter 键来运行它:

.\hello.exe

运行结果如下。

Hello, C++!

在 VS Code 默认的 PowerShell 终端中,开头的 .\ 表示 “当前文件夹”,也就是运行当前文件夹下的 hello.exe 程序。注意在 PowerShell 下不能省略开头的 .\,而在传统的命令提示符(CMD)中则可以直接输入 hello.exe 运行。

看到终端打印出 “Hello, C++!”,就说明整条运行链路已经打通了。有些小伙伴可能听说过 Code Runner 等一键运行插件,在起步阶段建议大家先手动输入命令熟悉一遍编译与运行流程,避免因插件默认未开启 C++20 标准而产生额外的配置报错。

常见报错与乱码排查

第一次搭环境写代码,遇到问题是非常正常的。下面整理了 4 个新手在本地实操时最常遇到的情况及排查方法。

1. 提示找不到 g++ 命令

如果在终端执行编译命令时,提示 “g++ 不是内部或外部命令” 或 “无法将 g++ 项识别为可运行程序的名称”,这属于典型的环境问题,说明系统还没有找到编译器。遇到这种情况,我们可以依次检查以下 2 点:

  • 打开文件资源管理器,查看 C:\msys64\ucrt64\bin 目录下是否存在 g++.exe 文件。
  • 检查【Path】环境变量中的路径是否填写正确,并且确认修改环境变量后已经把 VS Code 彻底关闭并重新打开。

2. 提示找不到 hello.cpp 文件

如果 g++ 能正常调用,但终端报错提示 “hello.cpp: No such file or directory”(找不到该文件或目录),通常是由以下 2 种原因导致的:

  • 终端所在的文件夹路径不对:确认 VS Code 左上角打开的文件夹就是存放 hello.cpp 的文件夹(如 cpp-test),并且文件已经按下快捷键(Ctrl + S)保存。
  • 文件后缀名变成了 .cpp.txt:如果在电脑文件夹里右键新建文本文档再改名,由于系统默认隐藏已知扩展名,实际文件名会变成 hello.cpp.txt。因此,平时应该直接在 VS Code 左侧资源管理器中点击【新建文件】来创建 .cpp 源文件。

3. 代码语法错误导致编译失败

如果终端打印出了带有具体文件行号的错误信息,那就说明开发环境已经配置好了,只是代码本身的语法写错了。比如不小心漏掉了语句末尾的英文分号,请看下面例子。

示例:漏写分号导致编译报错

#include <iostream>

int main() {
    std::cout << "Hello, C++!"    // 末尾漏写分号
    return 0;
}

运行结果如下。

(报错)hello.cpp:5:5: error: expected ';' before 'return' 

分析:

在这个例子中,第 4 行输出语句的末尾漏写了英文分号,编译时直接报出了语法错误。面对英文报错信息,我们不需要逐词翻译,重点看开头的 “文件名 + 行号 + 错误提示” 即可。

比如上面的 hello.cpp:5:5 提示在第 5 行 return 之前缺少了分号 ;。此时回到代码里把上一行漏掉的分号补上,按下快捷键(Ctrl + S)保存后再重新编译一次就可以了。

4. 终端输出中文显示乱码

很多小伙伴在把字符串改成中文(比如 "欢迎来到绿叶网!\n")后编译运行,会发现终端打印出来的中文变成了乱码。这是因为编码格式不一致:VS Code 默认使用 UTF-8 编码保存源文件,而中文版 Windows 的终端默认常按 GBK 编码显示文字。

如果需要在本地终端正常显示中文,可以使用以下 2 种方法中的任意一种:

  • 临时切换终端编码:在运行程序前,先在终端输入 chcp 65001 并按下 Enter 键,将当前终端窗口临时切换为 UTF-8 编码,然后再运行 .\hello.exe 即可正常显示中文。需要注意的是,这种方式只对当前终端窗口有效,关闭终端后下次需要重新输入。
  • 编译时指定输出编码:在编译命令中加上 -fexec-charset=GBK 参数,写成 g++ -std=c++20 -fexec-charset=GBK hello.cpp -o hello.exe,让生成的 .exe 程序直接按 GBK 编码输出中文,后续直接运行也不会乱码。
给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号