– 代理会话日,2月19日

编辑和导航 C++ 代码

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

编辑 C++ 代码

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

识别头文件

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

要指定其他包含目录,

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

Process of adding a new header to the include path

列出成员

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

List members

代码格式化

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 配置

快速信息

您可以将鼠标悬停在符号上,以查看其定义的内联视图

Quick info

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),然后输入您要查找的符号的名称。将出现一个潜在匹配项列表,该列表会随着键入进行过滤。从匹配项列表中选择以导航到该符号的位置。

Searching the current file

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

Searching in your workspace

您还可以通过访问 命令面板(⇧⌘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)) 并运行命令 调用:显示调用层次结构。这会在侧边栏的调用树中填充所有由您选择的函数调用的函数。

Selecting call hierarchy and showing calls in sidebar

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

Nested Calls for Call Hierarchy

速览

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

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

Peek definition

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

转到定义

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

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

转到声明

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

跳转到引用

使用 **跳转到引用** 功能来了解符号在您的源代码中被引用了多少次以及在哪里引用。在您的源代码中选择一个符号,然后按 ⇧F12 (Windows, Linux Shift+F12) 或右键单击并从上下文菜单中选择 **跳转到引用**。如果找到任何引用,它们将显示在一个 Peek 窗口中。

跳转到类型定义

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

后续步骤

继续阅读以了解:

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

© . This site is unofficial and not affiliated with Microsoft.