0.测试环境

1.Microsoft Windows [版本 10.0.19044.2604]
2.Visual Studio Code[版本1.76.0]

1. 简介

使用Visual Studio Code(以下简称vs code)进行c/c++开发,需要以下几个步骤:安装Mingw-w64、安装插件、设置插件、调试例程等步骤。本文将详细介绍每个步骤的具体操作方法。测试环境如上所示。

配置完成后可以实现vs code开发c/c++项目,支持c++20、c++23和c20、c23等语言标准。

如需进行其他语言开发,请参考:[[配置VSCode]] 、等。

2.安装Mingw-w64

2.1 安装软件

方法一:可以通过msys2下载安装Ming-w64的最新版本。

1.先访问MSYS2网站下载msys2软件,或直接点击链接msys2软件下载,并安装。
2.根据MSYS2网站的安装指南下载安装Ming-w64及Mingw-w64 toolchain。
3.以后随时可以通过msys2软件指令更新Ming-w64到最新版本。

方法二:直接访问Ming-w64的官方网站下载最新版本并手动安装。

1.直接访问Ming-w64的官方网站下载ming-w64-builds最新版本( x86_64-12.2.0-release-posix-seh-msvcrt-rt_v10-rev2.7z)。
2.解压缩所下载的软件包,得到一个目录 ming-w64,将该目录移动到 c:\或者 c:\tools\下。

笔者推荐使用第一种方式。

2.2 path配置

ming-w64软件包的目录( c:\mingw64\bin)添加到系统环境变量 PATH中,安装到其他目录的对应修改。

2.3 测试

在CMD窗口用以下指令测试安装和PATH设置是否成功,正常显示版本信息表示成功。

gcc --version
g++ --version
gdb --version

3.安装插件

只需安装插件包 C/C++ Extension Pack即可,它包含以下三个插件: c/c++c/c++ ThemesCMake Tools

千万不要安装 clangd插件,目前该插件对c++20、c++23语言标准特性只有部分支持,安装启用后,会对使用新特性的代码报错,且无法通过编译。并且其功能与Microsoft的 c/c++插件是重复的,像代码补全等功能 c/c++插件实现得更好。

4.设置插件

在插件窗口找到 c/c++插件,点击齿轮配置图标,在弹出的菜单中点击 Extension Settings,打开配置界面。设置代码补全功能和c/c++标准等参数。

依次将相关配置项配置为如图所示的值。 C_Cpp:Autocomplete设置为 defaultC_Cpp:Autocomplete Add Parentheses设置为 选中状态, C_Cpp:Code Folding设置为 enabledC_Cpp:Configuration Warnings设置为 enabled

C_Cpp:DefaultCpp Standard设置为 c++23C_Cpp:DefaultC Standard设置为 c23C_Cpp:Default:Enable Configuration Squiggles选项保持 选中

C_Cpp:Default:Intelli Sense Mode设置为 windows-msvc-x64。这是c++代码编辑窗口代码自动补全的设置,操作系统和安装环境不同的设置为其它相应的值。

其它代码补全的相关设置如图设置。

C_Cpp:Suggest Snippets选项保持 选中,其余选项按需设置即可。

5.调试例程

5.1 在CMD窗口创建工作目录

最后一条指令 code .会在当前工作目录打开 VS Code,这个工作目录就是工作区( workspace)。在 Workspace Trust dialog内选择 Yes, I trust the authors选项。

5.2 新建源代码文件

在文件资源管理器标题栏中,选择“新建文件”按钮并将文件命名为 : helloworld.cpp

5.3 添加helloworld源代码

将以下代码复制粘贴到helloworld.cpp文件中,按 ctrl+S保存。

5.4 调试运行程序

调试运行c++程序,需要在工作区内创建.vscode文件夹(系统自动生成),并在该文件夹内创建一些配置文件(也是系统自动生成):

  • tasks.json (build instructions) //构建说明(用于以非调试模式运行程序时)
  • launch.json (debugger settings) //调试器参数设置(用于调试模式运行程序时)
  • c_cpp_properties.json (compiler path and IntelliSense settings) //编译路径和代码补全的设置(该文件可选,是不使用CMake工具的项目保存项目设置参数用,使用CMake工具的项目将相关参数保存在文件 CMakeSettings.json,一般可不用)
  • settings.json //(该文件可选,是针对具体的项目需要制定特殊的设置参数时使用,一般可不用)

一般情况,只需前两个文件,配置好参数以后,再新建项目时可直接复制.vscode文件夹到新项目文件夹里(根据项目需要可自行修改相关参数)即可。

5.4.1 创建 task.json文件

在源代码文件helloworld.cpp打开的情况下,按 F5键或者点击 运行(R)菜单的 启动调试菜单项,弹出如下窗口:

选择第一项,Vs Code会自动在当前目录下的.vscode子目录(如不存在则自动生成该目录)下生成task.json配置文档(仅首次生成,以后选择其他项时为修改文档增加相应的调试器配置)并自动启动调试,文档内容如下:

调试时屏幕工作区相关布局如下,在终端窗口可以看到程序已经调试运行并正常输出了结果:

前面启动调试菜单项中,出现了系统找到的6款编译器,经测试,其中 cpp.execlang-cpp.exe生成的程序为16位,无法在当前主流的64位系统下运行。 clang-cl.exe目前不支持c++20及以上版本。

5.4.2 创建 launch.json文件

点击左侧工具条的 运行和调试图标,打开 运行和调试窗口,点击 创建launch.json文件可创建 launch.json文件,可以自定义运行和调试相关参数。

出现选择调试器的窗口,建议选择第一个 C++GDB/LLDB)

点击 C++GDB/LLDB)后创建 launch.json文件(仅首次创建,以后为在该文件中添加相关内容)并打开它:

此时配置文件为没有调试器配置参数的空的模板文档,点击文件内容窗口右下角的 添加配置按钮,出现Vs Code识别出的当前系统内可供选择的调试器,可根据需要选择:

5.4.2.1 创建 (gdb) Windows 上的 Bash 启动调试器参数

本次选择第一个 (gdb) Windows 上的 Bash 启动(注:此处的选择为错误的选择)

系统会自动将该调试器的参数配置添加到launch.json文档的配置列表 "configurations"中,请注意系统自动生成的该调试器的配置参数有一处需要手动修改,即 "program"参数,请将其值由 "输入程序名称,例如 ${workspaceFolder}/a.exe"修改为实际的程序名称,可使用系统变量,本处可设为: "${fileDirname}\\${fileBasenameNoExtension}.exe"。按ctrl+S保存修改。

关闭 launch.json文档,打开 helloworld.cpp源代码文档,点击 运行(R菜单或者按 F5键启动调试。出现报错界面如下:

报错信息提示找不到 bash.exe文件,经查找核实本机确实没有 bash.exe文件(这是linux/unix操作系统下的shell命令)。

5.4.2.2 创建 C++(gdb) 启动调试器参数

点击 打开"launch.json"按钮,再次点击文件内容窗口右下角的 添加配置按钮,出现Vs Code识别出的当前系统内可供选择的调试器,可根据需要选择,本次选择第三个。

选择第三项: C++(gdb) 启动,系统会自动将该调试器的参数配置添加到launch.json文档的配置列表 "configurations"中,请注意系统自动生成的该调试器的配置参数有两处需要手动修改:

一是 "program"参数,请将其值由 "输入程序名称,例如 ${workspaceFolder}/a.exe"修改为实际的程序名称,可使用系统变量,本处可设为: "${fileDirname}\\${fileBasenameNoExtension}.exe"

二是 "miDebuggerPath"参数,其值由 /path/to/gdb/改成gdb文件所在路径,本处可设为: "C:\\MinGw64\\bin\\gdb.exe"

按ctrl+S保存修改。修改后的内容如下:

关闭lanuch.json文件,从资源管理器窗口打开 helloworld.cpp源代码文件。点击左侧工具条的 运行和调试图标,打开 运行和调试窗口,在顶部的调试器下拉框单击打开下拉列表,选择 gdb)启动,点击下拉框左侧的三角形图标(或者按 F5键),启动调试。

调试输出如下:

可以在源代码程序内根据需要自行设置断点,再次启动调试。(调试程序的相关说明请参考有关文档)

5.4.2.3 创建 Windows)启动调试器参数

可根据需要依次测试添加其他的调试器,本次添加 Windows)启动调试器参数。注意其中的 "program"参数,请将其值由 "输入程序名称,例如 ${workspaceFolder}/a.exe"修改为实际的程序名称,可使用系统变量,本处可设为: "${fileDirname}\\${fileBasenameNoExtension}.exe"。修改后的调试器参数如下所示。

Windows)启动调试器调试helloworld.cpp程序,运行界面如下:

5.4.3 C++20标准特性测试

在上述helloworld.cpp文档中加入两行代码:

注:numbers库为C++20新支持的特性。

在代码输入界面可正常显示代码完成的提示信息,如下图所示:

输入完毕后,鼠标滑动到 pi上方时编辑器自动显示相关信息如下,说明编辑器已经支持了 C++20标准的新特性。

ctrl+S键保存代码,点击左侧工具条的 运行和调试图标,打开 运行和调试窗口,按 F5键启动调试,出现报错信息,源代码文件相应的代码行出现红色波浪线指示,说明调试器目前不支持该 C++20标准的新特性。

5.4.3.1 修改 launch.json文件

打开 launch.json文件,将每个调试器的  "args":[ ]修改为 "args": ["-std=c++23"],,按 ctrl+S键保存。

关闭该文件,再次启动运行和调试,发现程序已运行正常,并能按预期打印PI的值。

请注意, clang.exe类编译器(包括 clang.exe, clang++.exe)的参数要用 c++2a来代替 c++20,用 c++2b来代替 c++23。但 clang-cl.exe编译器目前不支持 c++2a/c++2b/c++20/c++23

5.4.3.2 修改 task.json文件

打开 task.json文件,针对每个任务的 args参数列表,添加下面这行参数,并保存修改。

再次在 运行和调试窗口,选择对应的任务来生成执行文件,发现程序运行正常。

请注意, clang.exe类编译器(包括 clang.exe, clang++.exe)的参数要用 c++2a来代替 c++20,用 c++2b来代替 c++23。但 clang-cl.exe编译器不支持 c++2a/c++2b/c++20/c++23

5.4.4 关于Makefile

我们在使用Vs code运行和调试cpp(c++)程序时,总是经常出现恼人的“ 未找到Make”、“ 找不到Makefile入口点”的报错信息。

如何解决请参阅:VS Code调试Cpp程序时报“未找到Make”错误问题

6.参考信息

6.1. VS Code官网

Get Started with C++ and Mingw-w64 in Visual Studio Code