编辑和浏览 C++ 代码
本文概述了 C/C++ 扩展特有的代码编辑和浏览功能。有关 Visual Studio Code 中常规编辑和浏览功能的更多信息,请参阅基础编辑和代码导航。
编辑 C++ 代码
C/C++ 扩展提供的源代码编辑功能是用于编辑、格式化和理解代码库的强大工具。
识别头文件
为了提供最佳的编辑体验,C++ 扩展需要知道在何处查找代码中引用的每个头文件。默认情况下,扩展程序会搜索当前源目录、其子目录以及一些特定于平台的位置。如果找不到引用的头文件,#include 指令下方会显示一条红色波浪线。
要指定其他包含目录,请执行以下操作:
- 选择一个没有引用的
#include路径。 - 选择出现的灯泡图标,然后选择
Edit "includePath" setting,这将打开 C/C++ 扩展的设置编辑器。 - 在 Include Path 部分下,您可以指定任何其他包含目录的路径。

列出成员
当您输入成员访问符号(. 或 ->)时,编辑器会显示一个成员列表。随着您输入更多字母,列表会实时过滤。

代码格式化
Visual Studio Code 的 C/C++ 扩展支持使用 clang-format 和 vc_format 进行源代码格式化。这两个格式化选项都包含在扩展中,其中 clang-format 为默认设置。
您可以通过右键菜单中的 Format Document (⇧⌥F (Windows Shift+Alt+F, Linux Ctrl+Shift+I)) 格式化整个文件,或者通过 Format Selection (⌘K ⌘F (Windows, Linux Ctrl+K Ctrl+F)) 仅格式化当前选中的内容。您还可以通过以下设置,根据用户操作(如输入、保存和粘贴)触发格式化:
editor.formatOnSave- 在保存文件时进行格式化。editor.formatOnType- 在输入时进行格式化(在输入 ; 字符时触发)。
要了解有关格式化的更多信息,请参阅格式化。
Clang-format
默认情况下,clang-format 样式设置为 file。这意味着如果您的工作区中存在 .clang-format 文件,则文件中指定的设置将用作格式化参考。否则,格式化将基于 C_Cpp.clang_format_fallbackStyle 设置中指定的默认样式。
目前,默认格式化样式为 Visual Studio,这是对 Visual Studio 默认代码格式化程序的近似模拟。它包含以下设置:
UseTab: (VS Code current setting)
IndentWidth: (VS Code current setting)
BreakBeforeBraces: Allman
AllowShortIfStatementsOnASingleLine: false
IndentCaseLabels: false
ColumnLimit: 0
要使用与扩展附带版本不同的 clang-format 版本,请将 C_Cpp.clang_format_path 设置更改为 clang-format 二进制文件的安装路径。
例如,在 Windows 平台上,请使用:
"C_Cpp.clang_format_path": "C:\\Program Files (x86)\\LLVM\\bin\\clang-format.exe"
vc_format
默认情况下,如果在正在格式化的代码附近识别出包含相关设置的 .editorconfig 文件,则会使用 Visual C++ 格式化引擎代替 clang-format。否则,请导航至 C_Cpp.formatting 设置并将其设置为 vc_format 以使用 Visual C++ 格式化引擎。
增强的语义颜色标记
启用 IntelliSense 后,Visual Studio Code C/C++ 扩展支持语义颜色标记。有关为类、函数、变量等设置颜色的更多信息,请参阅增强颜色标记。有关配置 IntelliSense 的更多信息,请参阅IntelliSense 配置。
快速信息
您可以将鼠标悬停在符号上,以查看其定义的内联视图。

Doxygen 注释
Doxygen 是一个从源代码生成文档的工具。当您用注释标记代码时,Doxygen 会为这些函数生成文档。对于 Doxygen 注释,输入 /** 并按 Enter 键即可生成 Doxygen 注释块。支持的 Doxygen 标签包括:@brief, @tparam, @param, @return, @exception, @deprecated, @note, @attention 和 @pre。
Markdown 注释
默认情况下,C++ 扩展支持在编辑器中显示部分 Markdown 内容。该子集支持除 _ 和 * 符号以外的所有 Markdown 注释。切换新的 Markdown in Comments 设置,可以选择启用所有 Markdown、保留此 Markdown 子集或禁用 Markdown 支持。
浏览源代码
源代码导航功能可以帮助您更好地理解代码库。这些功能允许您快速搜索代码中的符号、导航到它们的定义或查找它们的引用。
导航功能由存储在本地符号信息数据库中的一组标签提供支持。每当打开包含 C++ 源代码文件的文件夹时,C/C++ 扩展都会创建一个在这些文件中定义的符号数据库。此数据库会在文件更改时更新。如果文档在未保存的情况下关闭,数据库将更新至最后保存的状态。
搜索符号
您可以搜索当前文件或工作区中的符号,以便更快地浏览代码。
要搜索当前文件中的符号,请按 ⇧⌘O (Windows, Linux Ctrl+Shift+O),然后输入您要查找的符号名称。此时会出现潜在匹配项列表,该列表会随着您的输入进行过滤。从匹配项列表中进行选择,即可跳转到该符号的位置。

要搜索当前工作区中的符号,请按 ⌘T (Windows, Linux Ctrl+T),然后输入符号名称。此时会出现潜在匹配项列表。如果您选择的匹配项位于尚未打开的文件中,则该文件会在跳转到匹配位置之前被打开。

您还可以通过命令面板 (⇧⌘P (Windows, Linux Ctrl+Shift+P)) 访问这些命令来搜索符号。使用 Quick Open (⌘P (Windows, Linux Ctrl+P)),然后输入 @ 命令搜索当前文件,或输入 # 命令搜索当前工作区。⇧⌘O (Windows, Linux Ctrl+Shift+O) 和 ⌘T (Windows, Linux Ctrl+T) 分别是 @ 和 # 命令的快捷键。
调用层次结构
调用层次结构视图显示对函数的所有调用或由函数发出的所有调用。它使您能够理解源代码中函数之间复杂的调用关系。
要查看调用层次结构,请选择一个函数,右键单击以显示上下文菜单,然后选择 Show Call Hierarchy。您也可以使用键盘快捷键(Windows 上为 Shift+Alt+H),或者调用命令面板 (⇧⌘P (Windows, Linux Ctrl+Shift+P)) 并运行命令 Calls: Show Call Hierarchy。这将在侧边栏的调用树中填充选定函数调用的所有函数。

切换侧边栏菜单中的电话图标以切换到“传入调用”(incoming calls)。传入调用显示您的函数何时被其他函数引用。您还可以通过选择调用树中已显示的函数并右键单击该函数来查看可用命令,从而探索嵌套调用。

速览
Peek(速览)功能会在速览窗口内显示几行代码,这样您就不必离开当前位置。这对于快速了解符号的上下文而无需离开当前代码非常有用。
要打开速览窗口,请右键单击以进入上下文菜单,然后选择 Peek。在那里,您可以选择速览符号的定义、声明、类型定义或引用。

在速览窗口打开的情况下,您可以浏览显示的结果列表以找到您感兴趣的结果。如果您想跳转到这些结果之一的位置,请选择该结果或双击速览窗口左侧显示的源代码。
转到定义
使用 Go to Definition 功能可快速跳转到源代码中定义符号的位置。选择源代码中的符号,然后按 F12,或者右键单击并从上下文菜单中选择 Go to Definition。当符号只有一个定义时,您会直接跳转到其位置;否则,竞争定义将显示在上一节所述的速览窗口中。
如果找不到所选符号的定义,C/C++ 扩展会自动搜索该符号的声明。
转到声明
使用 Go to Declaration 功能可跳转到源代码中声明符号的位置。此功能与 Go to Definition 的功能相同,但适用于声明。选择源代码中的符号,右键单击,然后从上下文菜单中选择 Go to Declaration。这会将您跳转到符号声明的位置。
转到引用
使用 Go to References 功能可了解符号在源代码中被引用的频率和位置。选择源代码中的符号,按 ⇧F12 (Windows, Linux Shift+F12) 或右键单击并从上下文菜单中选择 Go to References。如果找到任何引用,它们将显示在速览窗口中。
转到类型定义
使用 Go to Type Definition 功能可跳转到源代码中定义类型的位置。选择源代码中的类型,右键单击以打开上下文菜单,然后选择 Go to Type Definition。
后续步骤
继续阅读以了解:
- 调试 C++ 代码
- 配置 IntelliSense
- 为 MSVC 配置 VS Code
- 为 Mingw-w64 和 GCC 配置 VS Code
- 为 macOS 配置 VS Code
- VS Code 中的基础编辑
- VS Code 中的代码导航
- VS Code 中的任务
如果您有任何其他问题或遇到任何问题,请在 GitHub 上提交 issue。系统可能会要求您提供来自扩展的日志信息以帮助诊断问题。请参阅 C/C++ 扩展日志记录以获取有关提供扩展日志的帮助。