编辑和导航C++代码

本文概述了特定于C/C++扩展的代码编辑和导航功能。有关Visual Studio Code中一般编辑和导航的更多信息,请参阅基本编辑代码导航

编辑C++代码

C/C++ 扩展提供的源代码编辑功能是用于编辑、格式化和理解代码库的强大工具。

识别头文件

为了提供最佳的编辑体验,C++扩展需要知道在代码中引用的每个头文件的位置。默认情况下,扩展会搜索当前源目录、其子目录以及一些特定于平台的位置。如果找不到引用的头文件,#include指令下方会显示红色波浪线。

要指定额外的包含目录,

  1. 选择一个没有引用的#include路径。
  2. 选择出现的灯泡图标,然后选择编辑 "includePath" 设置,这将打开C/C++扩展的设置编辑器。
  3. 包含路径部分,您可以指定任何额外包含目录的路径。

将新头文件添加到包含路径的过程

列出成员

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

列表成员

代码格式化

Visual Studio Code 的 C/C++ 扩展支持使用 clang-format 和 vc_format 进行源代码格式化。这两种格式化选项都包含在扩展中,其中 clang-format 是默认选项。

您可以使用格式化文档 (⇧⌥F (Windows Shift+Alt+F, Linux Ctrl+Shift+I)) 来格式化整个文件,或者使用格式化选择 (⌘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 设置,可以启用所有 Markdown,保留这部分 Markdown,或禁用 Markdown 支持。

导航源代码

源代码导航功能可以帮助您更好地理解您的代码库。这些功能让您可以快速搜索代码中的符号,导航到它们的定义,或找到它们的引用。

导航功能由一组存储在本地符号信息数据库中的标签驱动。每当打开包含C++源代码文件的文件夹时,C/C++扩展会创建一个包含这些文件中定义的符号的数据库。每当文件更改时,此数据库都会更新。如果文档未保存就关闭,数据库将更新到最后保存的状态。

搜索符号

您可以在当前文件或工作区中搜索符号,以更快地导航您的代码。

要在当前文件中搜索符号,请按 ⇧⌘O (Windows, Linux Ctrl+Shift+O),然后输入您要查找的符号名称。会出现一个潜在匹配项的列表,该列表会随着您的输入而过滤。从匹配项列表中选择以导航到该符号的位置。

搜索当前文件

要在当前工作区中搜索符号,请按 ⌘T (Windows, Linux Ctrl+T),然后输入符号的名称。将显示潜在匹配项的列表。如果您选择的匹配项位于尚未打开的文件中,则文件将在导航到匹配项的位置之前打开。

在您的工作区中搜索

您还可以通过命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))访问这些命令来搜索符号。使用快速打开 (⌘P (Windows, Linux Ctrl+P)),然后输入@命令来搜索当前文件,或输入#命令来搜索当前工作区。⇧⌘O (Windows, Linux Ctrl+Shift+O)⌘T (Windows, Linux Ctrl+T)@#命令的快捷方式。

调用层次结构

调用层次结构视图显示了对一个函数的所有调用或来自一个函数的调用。它让您理解源代码中函数之间复杂的调用关系。

要查看调用层次结构,请选择一个函数,右键单击以显示上下文菜单,然后选择显示调用层次结构。您还可以使用键盘快捷键(在Windows上为Shift+Alt+H),或调用命令面板⇧⌘P (Windows, Linux Ctrl+Shift+P))并运行命令调用:显示调用层次结构。这将在侧边栏中填充调用树,显示您选择的函数调用的所有函数。

选择调用层次结构并在侧边栏显示调用

切换侧边栏菜单中的电话图标以切换到呼入电话。每当您的函数被另一个函数引用时,呼入电话就会显示。您还可以通过选择调用树中已显示的函数并右键单击该函数以查看可用命令来探索嵌套调用。

调用层次结构的嵌套调用

查看

Peek功能在peek窗口中显示几行代码,这样您就不必离开当前位置。它对于快速理解符号的上下文非常有用,而无需离开当前代码。

要打开预览窗口,请右键点击以导航到上下文菜单,然后选择预览。在那里,您可以选择预览符号的定义、声明、类型定义或引用。

查看定义

打开预览窗口后,您可以浏览显示的结果列表,找到您感兴趣的内容。如果您想导航到其中一个结果的位置,请选择该结果或在预览窗口左侧显示的源代码中双击。

转到定义

使用转到定义功能快速导航到源代码中符号定义的位置。在源代码中选择一个符号,然后按F12,或右键单击并从上下文菜单中选择转到定义。当符号只有一个定义时,您将直接导航到其位置,否则竞争定义将显示在窥视窗口中,如前一节所述。

如果找不到所选符号的定义,C/C++扩展程序会自动搜索该符号的声明。

转到声明

使用转到声明功能导航到源代码中符号声明的位置。此功能与转到定义功能相同,但用于声明。在源代码中选择一个符号,右键单击,然后从上下文菜单中选择转到声明。这将导航到符号声明的位置。

转到引用

使用转到引用功能来了解符号在源代码中被引用的频率和位置。在源代码中选择一个符号,然后按下⇧F12 (Windows, Linux Shift+F12)或右键单击并从上下文菜单中选择转到引用。如果找到任何引用,它们将显示在预览窗口中。

转到类型定义

使用转到类型定义功能跳转到源代码中类型定义的位置。在源代码中选择一个类型,右键单击以打开上下文菜单,然后选择转到类型定义

下一步

继续阅读以了解以下内容:

如果您有任何其他问题或遇到任何问题,请在GitHub上提交问题。您可能会被要求提供扩展的日志信息以帮助诊断问题。有关提供扩展日志的帮助,请参阅C/C++扩展日志