0.使用本教程能得到的功能#

以下是对本教程所配置的 VSCode 额外拥有的功能的统计, 按照需要的 C++ 理解程度从上到下排序 (非常不完全, 仅列出对初学者帮助较大的功能中的少部分). 其他如 VSCode 的时间线等等本身就有的功能, 请自行探索、查询文档或网上教程.

提示

附录中有解释这些内容具体是如何配置的, 又该如何更可控地使用. 请在配置完成、有一定 C++ 基础后尝试阅读.

代码拥有更丰富的字体和颜色#

clangd 计算了各种语义符号, 允许用户在 VSCode 设置中用 editor.semanticTokenColorCustomizations 对各种语义的字体、颜色进行自定义.

我于是利用 VSCode 默认的 Dark 和 Light 主题的互补色、相近色, 对变量、const 变量、成员变量、函数参数等各种内容进行了区分.

../_images/%E6%9B%B4%E4%B8%B0%E5%AF%8C%E7%9A%84%E5%AD%97%E4%BD%93%E5%92%8C%E9%A2%9C%E8%89%B2.png

代码行内显示警告和错误#

利用 Error Lens 插件, VSCode 将能在代码行内显示警告和错误, 这能大幅改善代码编写体验.

../_images/%E4%BB%A3%E7%A0%81%E8%A1%8C%E5%86%85%E6%98%BE%E7%A4%BA%E8%AD%A6%E5%91%8A%E5%92%8C%E9%94%99%E8%AF%AF.png

自动添加头文件#

clangd 提供了自动添加头文件功能: clangd 常常在我们编写代码时提供建议列表, 当我们通过 回车 选择建议列表中的项后, 它将自动添加对应的头文件.

../_images/%E8%87%AA%E5%8A%A8%E6%B7%BB%E5%8A%A0%E5%A4%B4%E6%96%87%E4%BB%B6.gif

自动格式化#

clangd 为 VSCode 提供了 clang-format 支持, 因而在通过 Ctrl-SCommand⌘-S 或工具栏手动保存代码时, 代码将会被格式化.

../_images/%E8%87%AA%E5%8A%A8%E6%A0%BC%E5%BC%8F%E5%8C%96.gif

代码中显示额外信息 (inlay hints)#

clangd 会在代码间显示额外信息, 如 if 语句在哪结束、函数在哪结束、下标序号、类型推导结果等.

../_images/%E4%BB%A3%E7%A0%81%E4%B8%AD%E6%98%BE%E7%A4%BA%E9%A2%9D%E5%A4%96%E4%BF%A1%E6%81%AF.png

鼠标悬停显示代码信息#

clangd 提供了鼠标悬停显示代码信息功能: 当我们将鼠标放置在代码上时, 将会显示对应的信息.

../_images/%E9%BC%A0%E6%A0%87%E6%82%AC%E5%81%9C%E6%98%BE%E7%A4%BA%E4%BB%A3%E7%A0%81%E4%BF%A1%E6%81%AF.png

提示

你也可以自定义快捷键在光标所在处显示代码信息.

一键重命名标识符#

clangd 提供了一键重命名标识符功能: 我们可以按 F2 对当前光标所在的标识符进行重命名, 这样代码中所有对它的使用都将被重命名.

../_images/%E4%B8%80%E9%94%AE%E9%87%8D%E5%91%BD%E5%90%8D%E6%A0%87%E8%AF%86%E7%AC%A6.gif

警告

该重命名功能在有些时候不能进行, 且不允许标识符被重命名为与 当前位置可见的其他标识符 相同的名字.

同时管理多个程序#

本配置采用 CMake 进行项目管理, 因此可以在一个项目中管理多个程序: 一个程序由一个包含 main() 函数的主源文件和零或多个其他源文件构成. 这样一来, 我们不必新建一整个项目来进行下一个练习——我们只需要在本项目中再添加一个程序.

参见

请在完成配置后, 阅读 4.添加你自己的程序 以了解如何添加新的程序.

Sanitizer 检查下标越界等运行时错误#

本配置用 aminya/project_options 为 CMake 完成项目配置, 并利用它默认启用了 address sanitizer 和 undefined behaviour sanitizer. 这意味着, 如果我们 实际运行程序 时遇到了下标越界、整型溢出等未定义行为, 程序将会报错并为我们提供相关信息.

../_images/sanitizer.png

更多的静态检查和自动修复#

clangd 为 VSCode 提供了 clang-tidy 支持, 将会在编写代码时实时调用 clang-tidy 进行静态检查. 它会对变量未初始化, if 中的 == 写成了 = 等上百种问题进行检查, 并为一些常见的问题提供了自动修复方法. 具体请在配置完成后参考 关于黄色警告和删除线.

此外, 我还相比于默认配置, 为编译器启动了更多的警告诊断.

警告

为了初学者不过于受影响, 我关闭了很多严格的警告. 如果想要开发一个成熟的项目而启用更多警告, 请在配置完成后参考 C++ 和 CMake 的学习建议参考文献及拓展阅读.

显示可供调用的函数签名#

在调用函数时, clangd 将会展示出目前可供调用的函数.

../_images/%E6%98%BE%E7%A4%BA%E5%8F%AF%E4%BE%9B%E8%B0%83%E7%94%A8%E7%9A%84%E5%87%BD%E6%95%B0%E7%AD%BE%E5%90%8D.gif

提示

你可以自定义快捷键来切换显示的函数签名, 就像动图里那样.

代码结构导航#

clangd 允许 VSCode 的大纲获知当前源文件的代码结构, 此外还提供了各种在代码结构中跳转的方法.

../_images/%E5%A4%A7%E7%BA%B2.png

交叉引用#

变量会被声明和使用, 函数会被声明和调用…… clangd 支持在文件间或文件内查找符号被用在了其他哪些地方:

  • 通过 Ctrl-鼠标左击Command⌘-鼠标左击, 我们将能在鼠标点击的符号和它的定义之间跳转.

  • 通过 F12, 我们将能在光标所在的符号和它的定义之间跳转.

  • 通过 Shift-F12, 我们将能在代码区域中打开一个小窗口, 临时地查看光标所在的符号的所有被使用地点.

  • ……

提示

更多功能可通过在代码区域右键了解到.

一键第三方库安装#

本配置用 aminya/project_options 为 CMake 完成项目配置, 它支持几乎一键完成第三方库的安装和使用. 具体请在配置完成后参考 另.安装第三方库 和配置好的文件夹中的 请读我 文件.