Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

VSCode是笔者用过的最好用的开发工具,没有之一。笔者14年的码龄生涯中,先后用过Eclipse、 IntelliJ IDEA、 WebStorm、 PyCharm、 Visual Studio(2010/2013/2015)、 NetBeans、 Sublime Text等,但自从用VSCode之后,就再没换过其他工具,一直用到现在有5年多的时间。

1. 本文目标

这篇文章主要介绍如何使用VSCode来进行C++项目的开发,用VSCode来搭建一套C++跨平台开发环境。

2. 准备工作

官网下载VSCode并安装: https://code.visualstudio.com/

3. 安装C++编译器和调试器

参见《一文搞懂C/C++常用编译器》一文。

4. 安装插件

VSCode是一个功能丰富的代码编辑器,支持C++、JavaScript、Python、Java等多种语言的开发。同时还支持非常多的插件,可以拓展VSCode的功能,以满足各种开发的需求。为了更好地开发C++项目,需要安装一些插件。

插件名称 发布者 插件类型 功能介绍 备注
C/C++ Extension Pack Microsoft C++开发 是微软提供的用于C++开发的VSCode插件工具集合,包括以下插件:
C/C++
C/C++ Themes
CMake
CMake Tools
你可以通过“C/C++ Extension Pack”一次性安装这四个子插件,也可以自己单独安装其中的部分插件。
C/C++ Microsoft C++开发 微软提供的C/C++开发工具,支持代码格式化、关键字提示和补全等功能。
C/C++ Themes Microsoft C++开发 代码高亮/代码主题设置等功能
CMake twxs C++开发 cmake语法高亮,cmake代码智能提示和补全。
CMake Tools Microsoft C++开发 CMake构建和调试工具栏(VSCode底部工具栏)
Clang-Format Xaver Hellauer C++开发 Linux和macOS下安装 C/C++插件后,就自带了C++的代码格式化器,但是windows下好像没有,可以安装这个插件做C/C++的代码格式化器
C/C++ Snippets Harsh C++开发 C/C++重用代码块
cpp-check-lint QiuminGe C++开发 基于cppcheckcpplint的C/C++代码检查工具
C/C++ Advanced Lint Joseph Benden C++开发 1. C/C++静态代码分析工具,特点:支持多种不同的静态代码分析工具。
2. 与cpp-check-lint是同类型的插件,可以根据自己的需求选择其中一个。
C++ include refactor tostc C++开发 重命名或刪除头文件时会自动重构引用处的代码
Makefile Microsoft C++开发 可以帮助开发者更方便地管理和构建基于 Makefile 的项目,提供代码补全、构建任务集成、调试支持等功能。
TODO Highlight wayyou
Jonathan Clark
通用插件 高亮todo关键词。 V1由wayyou发布和维护,V2(2020之后)由Jonathan Clark发布和维护。
Bracket Pair Colorizer CoenraadS 通用插件 成对的括号标记成不同的颜色,提高代码的可读性。 该插件已废弃,因为最新版本的VSCode已经内置了该功能
Code Runner Jun Han 通用插件 运行C/C++代码. 该插件支持C/C++/Python/Java等多种语言。
Hex Editor Microsoft 通用插件 以十六进制方式打开二进制文件

5. 插件的用法

5.1. C/C++

5.1.1. 插件介绍

在VSCode下进行C/C++开发,C/C++插件是最重要、功能最强大、也是最复杂的一个插件。我们从C/C++的插件配置也能看出端倪:整个插件有158项配置,包含7大功能模块:

  • IntelliSense: 代码智能提示、补全、跳转等功能,集成了C++ Intellisense插件的几乎所有功能。
  • Formatting: 代码格式化器,可对代码进行自动格式化。
  • Code Documentation: 通过代码(注释)生成文档,定义注释的样式,集成Doxygen等工具。
  • Code Analysis: 代码分析器,对代码的错误、风格等进行检查,集成了Clang-Tidy
  • Debugging: Debug调试器。
  • Resource Management: 资源管理器。
  • Miscellaneous: 其他杂项配置。

进行C/C++开发,C/C++是必装的一个插件,因为没有这个插件,你跟在记事本里写代码没有太大区别。

5.1.2. 插件配置

虽然C/C++这个插件功能很多很复杂,但是我们也并不需要把158项配置全都了解完。因为大部分配置我们直接用默认的就可以了,并不需要逐个去了解他,默认配置即是最佳配置。我们只需要了解一小部分常用配置即可。

settings.json:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
// 启用|禁用错误提示,可选值: enabled, disabled
"C_Cpp.errorSquiggles": "enabled",
// Intellisense的配置。启用|禁用智能提示,可选值:Default、Disabled
"C_Cpp.autocomplete": "Default",
// C++语言编辑哪些内容时会进行智能提示和补全
"[cpp]": {
"editor.quickSuggestions": {
"comments": "on", // 代码注释
"strings": "on", // 常量字符串
"other": "on" // 其他
}
},
// C语言编辑哪些内容时会进行智能提示和补全
"[c]": {
"editor.quickSuggestions": {
"comments": "on", // 代码注释
"strings": "on", // 常量字符串
"other": "on" // 其他
}
}
}

5.2. Clang-Format

  1. 下载LLVM

点击 llvm-project/releases 进入LLVM项目的二进制下载页面,下载最新版本的Windows安装包。

  1. 安装LLVM

将下载后的安装包clang+llvm-18.1.8-x86_64-pc-windows-msvc.tar.xz解压后拷贝到自己的软件安装目录下(如:C:\software\clang-llvm-18.1.8),bin目录下会有个 clang-format.exe,这个就是我们需要的代码格式化器。

  1. 配置码格式化器

打开Clang-Format插件的配置页面:
vscode -> Settings -> Extensions -> Clang-Format configuration

方式一:
clang-format.exe的绝对路径设置到Executable

方式二:
C:\software\clang-llvm-18.1.8\bin目录添加到系统环境变量的Path中,VSCode配置页的Executable填写clang-format

如果不配置 clang-format.exe 路径,格式化代码就会报错如下:

1
The 'clang-format' command is not available. Please check your clang-format.executable user setting and ensure it is installed.
  1. 格式化代码的快捷键

格式化部分代码: 选中部分代码,ctrl + k , ctrl + f

格式化所有代码: shift + alt + f。

格式化整个代码源文件: 编辑区域右键 -> Format Document。

  1. 设置代码风格样式

打开Clang-Format插件的配置页面:vscode -> Settings -> Extensions -> Clang-Format configuration

Fallback Style:选择你喜欢的风格样式,可以使用以下这些值,这些都是最受欢迎的C++代码风格样式:

LLVM, Google, Chromium, Mozilla, WebKit。

  1. 自定义代码样式

如果以上这些代码风格的样式都不能满足你的需求,可以自定义代码风格样式,也可以基于某种特定的代码风格做一些符合自己习惯的样式调整。

在项目的根目录下创建一个.clang-format文件,并在文件中写入自定义的代码风格样式,具体格式定义的使用规则可以参考Clang-Format Style Options

以下是个人的.clang-format配置,可以作为Demo提供参考:

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
# clang-format的般般: 18.1.8
# 基于Mozilla的样式进行自定义

Language: Cpp
BasedOnStyle: Mozilla
# 代码缩进:空格数
IndentWidth: 4
# Tab键设置:不使用换行符\t(使用空格)
UseTab: Never
# Tab键设置:4个空格
TabWidth: 4
# 权限关键字(public, private, protected): 往左缩进4个字符
AccessModifierOffset: -4
# 最大列宽:99
ColumnLimit: 99

# # 大括号({})换行
# BreakBeforeBraces: Allman
# # 短函数的处理策略:只有空函数才会合并成一行
# AllowShortFunctionsOnASingleLine: Empty
# # 短条件语句的处理策略:从不合并成一行
# AllowShortIfStatementsOnASingleLine: Never
# # 短循环语句的处理策略:从不合并成一行
# AllowShortLoopsOnASingleLine: false
# # 短代码块的处理策略:只有空代码块才会合并成一行
# AllowShortBlocksOnASingleLine: Empty
# # 模板声明后的换行策略:总是换行
# AlwaysBreakTemplateDeclarations: Yes
# # 指针的对齐方式:右对齐
# PointerAlignment: Right
# # # 指针(引用)的对齐方式:会分析文件内的大部分指针的对齐方式来决定自己的策略
# DerivePointerAlignment: true

5.3. cpp-check-lint

cpp-check-lint基于cppcheckcpplint的C++代码检查工具,他将cppcheckcpplintVSCode完美的集成在一起。对cppcheckcpplint有依赖,其中cppcheck需要自己另外手动安装,并将可执行文件的路径配置到插件的cpp-check-lint.cppcheck.--executable

5.3.1. cpplint

cpplint是一个用于检查C++代码规范的工具,它可以帮助我们自动化地检查代码,发现潜在的编码问题,确保代码风格的一致性和规范性,提高代码质量。cpplint的代码检查会遵循 Google C++ Style Guidecpplint工具本身是有Python实现的,可以通过pip install来安装。

cpplint侧重于C++代码规范和风格的检查。

5.3.2. cppcheck

cppcheck是一个 C/C++ 静态代码分析工具,检测编译器通常无法检测到的错误类型,目标是没有误报。

cpplint侧重于C++代码的错误、潜在安全问题、潜在性能问题的检查。

检查范围包括:

1
2
3
4
5
6
7
8
9
自动变量检查;
数组的边界检查;
class类检查;
过期的函数,废弃函数调用检查;
异常内存使用,释放检查;
内存泄漏检查,主要是通过内存引用指针;
操作系统资源释放检查,中断,文件描述符等;
异常STL 函数使用检查;
代码格式错误,以及性能因素检查。

5.3.3. 插件的使用

  1. 下载并安装Cppcheck(Windows通过安装包安装的话,安装完后要设置Path环境变量)。
  2. 打开命令行终端,执行cppcheck --version检查是否安装正常,有正常输出版本号说明安装成功。
  3. 重启VSCode.
  4. 打开配置页(vscode -> Settings -> Extensions -> cpp-check-lint)完成相应的配置:

关键配置说明如下:

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
# 是否启用cpp-check-lint插件
"cpp-check-lint.--enable": true,
# 是否启用cppcheck检查
"cpp-check-lint.cppcheck.--enable": true,
# 如果已配置Path环境变量,可直接填写cppcheck,否则需要填写绝对路径
"cpp-check-lint.cppcheck.--executable": "cppcheck",
# 使用什么语言进行检查,可以选择:c、c++
"cpp-check-lint.cppcheck.--language=": "c++",
# 使用的C++标准
"cpp-check-lint.cppcheck.--std_c++=": "c++11",
# 使用的C语言标准
"cpp-check-lint.cppcheck.--std_c=": "c11"
# 是否支持内联函数
"cpp-check-lint.cppcheck.--inline-suppr": false,
# 是否开启文件保存时立刻检查该文件
"cpp-check-lint.cppcheck.--onsave": true,
# 是否开启快速修复功能
"cpp-check-lint.cppcheck.--quick_fix": false,
# 开启额外的检查,可以选择一项或多项(多项时用','分割)。可以是以下类型值:
# warning: 开启警告消息
# style: 开启代码样式(规范)检查
# performance: 开启代码性能检查
# portability: 开启可移植性检查
# information: 启用info信息检查
# unusedFunction: 启用 未使用的函数 检查
# missingInclide: 未包含头文件时发出警告
# all: 以上所有类型检查
"cpp-check-lint.cppcheck.--enable=": "all",
# 是否启用cpplint检查
"cpp-check-lint.cpplint.--enable": true,
# 如果已配置Path环境变量,可直接填写cpplint,否则需要填写绝对路径
"cpp-check-lint.cpplint.--executable": "cpplint"
# 代码行长度限制
"cpp-check-lint.cpplint.--linelength=": 120,
# 是否开启文件保存时立刻检查该文件
"cpp-check-lint.cpplint.--onsave": true,
# 是否开启快速修复功能
"cpp-check-lint.cpplint.--quick_fix": true,
# 会检查的文件后缀,可以这些值:hxx,h++,cxx,cc,hh,h,cpp,cuh,c,hpp,c++,cu
"cpp-check-lint.cpplint.--extensions=": "hxx,h++,cxx,cc,hh,h,cpp,c,hpp,c++"
# 支持的头文件后缀
"cpp-check-lint.cpplint.--headers=": "hxx,h++,hh,h,hpp",

5.4. C/C++ Advanced Lint

5.4.1. 插件介绍

C/C++ Advanced Lint是C/C++静态代码分析工具,支持:1. 自动识别可用的静态代码分析工具,2. 代码编写过程中执行检测。与cpp-check-lint是同类型的插件,最大的区别是支持的代码分析工具的钟磊和数量不同。

cpp-check-lint 只支持:

  • CppCheck
  • CppLint

C/C++ Advanced Lint支持:

  • CppCheck
  • Clang
  • FlawFinder
  • PC-lint Plus
  • Flexelint or PC-lint
  • lizard

C/C++ Advanced Lint要正常使用,至少需要安装一种上面的代码分析工具(可以同时安装和启用多个分析工具)。

5.4.2. 插件配置

关键配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
{
// 启用C/C++ Advanced Lint插件
"c-cpp-flylint.enable": true,
// 什么时候执行代码检查,可填写:onType、onSave、onBuild
"c-cpp-flylint.run": "onSave",
// 检测的语言类型,可线性:c、c++
"c-cpp-flylint.language": "c++",
// C和C++的标准,可填写:c11、c++11、c++14、c++17、c++20
"c-cpp-flylint.standard": [
"c11",
"c++11"
]
}

代码分析工具的配置:

  1. Cppcheck的配置可以参考“5.2.3. 插件的使用”的相关内容。
  2. 其他代码分析工具的配置,大家可以自己阅读对应的官方文档。
  3. 只需要配置已安装并启用的代码分析工具。

5.5. Bracket Pair Colorizer

5.5.1. 插件介绍

插件功能:成对的括号标记成不同的颜色,提高代码的可读性。
插件说明:该插件已废弃,因为最新版本(我的1.91.1版本已经内置了)的VSCode已经内置了该功能。

5.5.2. 功能配置

既然VSCode已经内置了该功能,我们将不在需要安装这个插件,直接在VSCode的设置中配置该功能即可。

  1. 打开配置页面:vscode -> Settings
  2. 在搜索框种输入@id:editor.bracketPairColorization.enabled @id:editor.guides.bracketPairs
  3. Editor › Guides: Bracket Pairs的三个可选参数,含义分别如下:
    • false: 禁用括号对引导线
    • true: 启用括号对引导线
    • active: 只对当前光标所在的括号对启用括号对引导线

5.6. Code Runner

5.6.1. 插件介绍

Code Runner是一款VSCode的插件,它可以让你在VSCode中运行C、C++、Java、Python、JavaScript、PHP、Go、Swift、Perl、Ruby、R等语言的代码。

通过这个插件可以快速的编译、运行C++代码,在编写和调试一些Demo代码时非常方便。(在编译大型项目代码时还是建议用CMake、QT、Visual Studio等工具)。

5.6.2. 插件配置

settings.json:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
// 配置Code Runner针对C++语言的运行脚本
"code-runner.executorMap": {
// Linux下通过GCC编译器便于和运行
"cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
// ... 其他语言
},
// 运行代码时是否在终端中打开,可选值:true、false
"code-runner.runInTerminal": true,
// 设置终端控制台的编码,65001是UTF-8编码
"terminal.integrated.shellArgs.windows": [
"/K chcp 65001 >nul"
]
}

5.6.3. 插件使用

方法一:在要执行的.cpp文件右键 -> Run Code

方法二:在VSCode的命令面板中输入:Code Runner: Run Code,然后选择Run Code按回车

方法三:快捷键:Ctrl + Alt + N

5.7. TODO Highlight

5.7.1. 插件介绍

TODO Highlight是一款VSCode的插件,它可以高亮显示代码中存在的TODOFIXME等注释,方便开发者快速定位代码中需要解决的任务。

5.7.2. 添加高亮关键字

  1. 进入设置页面: vscode -> Settings -> Extensions -> TODO Highlight
  2. TODOhighlight:Keywords配置项点击Edit in settings.json
  3. "todohighlight.keywords"中增加需要定义的关键词。

插件默认只配置了两个关键字:TODO:FIXME:,注意后面需要跟:才能显示高亮。定义如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
// ...
"todohighlight.keywords": [
{
"text": "TODO:",
"color": "#fff",
"backgroundColor": "#ffbd2a",
"overviewRulerColor": "rgba(255,189,42,0.8)"
},
{
"text": "FIXME:",
"color": "#fff",
"backgroundColor": "#f06292",
"overviewRulerColor": "rgba(240,98,146,0.8)"
}
]
}

我的需求是:

  • 关键不加:也要能高亮。
  • 关键字要同时支持大小写。

修改后的配置如下:

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
{
// ...
"todohighlight.keywords": [
{
"text": "TODO",
"color": "#fff",
"backgroundColor": "#ffbd2a",
"overviewRulerColor": "rgba(255,189,42,0.8)"
},
{
"text": "FIXME",
"color": "#fff",
"backgroundColor": "#f06292",
"overviewRulerColor": "rgba(240,98,146,0.8)"
},
{
"text": "todo",
"color": "#fff",
"backgroundColor": "#ffbd2a",
"overviewRulerColor": "rgba(255,189,42,0.8)"
},
{
"text": "fixme",
"color": "#fff",
"backgroundColor": "#f06292",
"overviewRulerColor": "rgba(240,98,146,0.8)"
}
]
}

6. C++开发常用的快捷键

Windows/Linux macOS 功能描述
Alt + O Option + O 头文件(.h)与源文件(.cpp)之间切换
F12 Fn + F12 快速跳转到变量或函数的定义
Shift + F12 Shift + Fn + F12 查看所有引用,如:变量或函数的定义和所有被调用的地方
Alt + F12 Cmd + Shift + F10 Peek(窥视)定义: 在不离开当前代码上下文的情况下查看符号的定义

7. 参考文档

https://clang.llvm.org/docs/ClangFormatStyleOptions.html

https://dev.to/dhanu0510/how-to-configure-c-code-formatting-in-visual-studio-code-4d5m

推荐阅读
VSCode系列1-VSCode搭建最强Markdown编辑环境 VSCode系列1-VSCode搭建最强Markdown编辑环境 一文搞懂C/C++常用编译器 一文搞懂C/C++常用编译器 Linux C++ 开发1 - 搭建C++开发环境 Linux C++ 开发1 - 搭建C++开发环境

评论