本站点文档内容均翻译自code.visualstudio.com,仅供个人学习,如有差异请以官网为准。

配置 C/C++ 智能感知

本文讨论了如何配置C/C++扩展,以在Visual Studio Code中提供特定于C++的IntelliSense建议。IntelliSense是VS Code内置的一个有用的工具,提供各种代码编辑功能,帮助你更快更高效地编码。例如,代码完成、参数信息、语法高亮、Code Actions(小灯泡)和成员列表都是使用IntelliSense生成的。

C/C++ IntelliSense 只需要在你的系统上安装 C/C++ 编译器。C/C++ 编译器向 IntelliSense 提供 C++ 特定的信息,例如系统包含路径的位置和其他设置。有关项目级别的配置,请参考项目级别 IntelliSense 配置部分。

C/C++ 扩展何时会为我配置核心的 Intellisense 功能?

编译器是配置核心IntelliSense功能的唯一要求。为了识别用于IntelliSense的编译器,C/C++扩展会扫描您机器上常见的路径,寻找如Clang、GCC、MinGW、cygwin、cygwin64和MSVC等编译器。如果识别出这些编译器并且位于安全位置,它们将自动为IntelliSense配置。否则,会显示通知要求您确认是否应为IntelliSense配置该编译器。在任何情况下,所选择的编译器也将被设置为默认编译器。

如何检查IntelliSense是否已配置

如果你没有配置IntelliSense,C/C++扩展将在状态栏中显示一个带有警告标志的黄色指示器,并标有配置IntelliSense

在状态栏中配置IntelliSense指示器

要进行配置,请选择状态栏指示器,这将弹出配置快速选择。快速选择可以帮助您选择或安装C/C++编译器。

如果您没有看到状态栏指示器,您也可以检查您的项目c_cpp_properties.json 文件。此文件存储了所有你的IntelliSense配置设置。通过在命令面板中选择 C/C++: 编辑配置 (UI) 来导航到此文件(⇧⌘P(Windows, Linux Ctrl+Shift+P)。检查 智能感知模式找到你的配置。

命令面板过滤了C/C++编辑配置命令

如何配置IntelliSense

IntelliSense 配置存储在c_cpp_properties.json文件,该文件在您的工作区中自动生成。以下三个选项是编辑的不同方式c_cpp_properties.json文件:

选项 1. 通过配置快速选择选择一个配置选项

在命令面板中输入选择IntelliSense配置打开快速选择 (Windows, LinuxCtrl+Shift+P)它会显示一个下拉菜单,列出C/C++扩展在你机器上找到的所有配置选项。

选择一个编译器来配置用于IntelliSense快速选择

选择可用的选项之一。如果您选择了一个编译器,此编译器将默认用于IntelliSense。您可以随时返回配置IntelliSense快速选择,以更改用于配置IntelliSense的选项。

如果快速选择中没有可用选项,说明您的系统中无法识别到编译器。您可以手动浏览您的机器或安装C/C++编译器。在Windows机器上安装,请选择帮助我安装编译器选项,该选项将您重定向到如何安装C/C++编译器的分步指南。在macOS或Linux机器上,请选择安装编译器并按照提示进行操作,以在您的机器上安装C++编译器。

选项2. 通过用户界面编辑您的IntelliSense配置

通过选择打开你的IntelliSense配置C/C++: 编辑配置 (UI) 从命令面板 (⇧⌘P (Windows, Linux Ctrl+Shift+P))。此视图是用于c_cpp_properties.json文件。

C/C++ IntelliSense 配置用户界面

设置编译器路径字段为用于构建项目所使用的编译器的完整路径。例如,在 Linux 上使用 GCC 的默认安装路径时,编译器路径是/usr/bin/gccIntelliSense模式设置为您使用的编译器的特定架构版本。

选项 3. 直接编辑 c_cpp_properties.json 文件

您可以编辑c_cpp_properties.json 直接将文件定制化你的配置。使用 C/C++ 编辑配置 (JSON) 命令从命令面板 (⇧⌘P (Windows, Linux Ctrl+Shift+P)),然后 c_cpp_properties.json文件在.vscode你的工作区文件夹。

命令面板过滤了C/C++编辑配置(JSON)命令

使用编译器路径变量用于添加编译器。此变量是您用来构建项目所使用的编译器的完整路径。例如,在 Linux 上使用 GCC 的默认安装路径时,编译器路径是/usr/bin/gcc输入:.

欲了解更多关于c_cpp_properties.json 文件,查看 模式参考

根据您的操作系统选择下面的示例进行c_cpp_configuration.json文件:

> Windows 上的示例 c_cpp_configuration.json

使用 MinGW 的默认安装路径:

{
  "configurations": [
    {
      "name": "Win32",
      "includePath": ["${workspaceFolder}/**"],
      "defines": ["_DEBUG", "UNICODE", "_UNICODE"],
      "windowsSdkVersion": "10.0.22621.0",
      "cStandard": "c17",
      "cppStandard": "c++17",
      "intelliSenseMode": "${default}",
      "compilerPath": "C:/msys64/mingw64/bin/gcc.exe"
    }
  ],
  "version": 4
}

> macOS 上的示例 c_cpp_configuration.json
使用Clang的默认安装路径:
{
  "configurations": [
    {
      "name": "Mac",
      "includePath": ["${workspaceFolder}/**"],
      "defines": [],
      "macFrameworkPath": [
        "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks"
      ],
      "compilerPath": "/usr/bin/clang",
      "cStandard": "c17",
      "cppStandard": "c++17",
      "intelliSenseMode": "macos-clang-arm64"
    }
  ],
  "版本"4
}

> Linux 上的 c_cpp_configuration.json 示例
使用GCC的默认安装路径:
{
  "configurations": [
    {
      "name": "Linux-GCC",
      "includePath": ["${workspaceFolder}/**"],
      "defines": [],
      "compilerPath": "/usr/bin/g++",
      "cStandard": "c17",
      "cppStandard": "c++17",
      "intelliSenseMode": "gcc-x64",
      "browse": {
        "path": ["${workspaceFolder}"],
        "limitSymbolsToIncludedHeaders": true,
        "数据库文件名": ""
      }
    }
  ],
  "版本": 4
}

项目级别IntelliSense配置

通过编译器配置 IntelliSense 可为您提供核心 IntelliSense 功能。此设置称为基本配置。对于更复杂的使用场景,例如设置一个需要的项目:

  • 附加包含路径,例如引用一个或多个不同库的路径
  • 特定的编译器参数会影响语言的行为(因此也会影响IntelliSense)

有多种其他方式可以配置IntelliSense。您可以通过以下方式之一提供这些额外配置:

  • c_cpp_properties.json文件和相关设置
  • 另一种形式的自定义配置提供程序,即另一个 VS Code 扩展(例如 Makefile 工具CMake 工具 扩展)
  • 一个编译命令.json文件

配置提供者

自定义配置提供者是 VS Code 中的另一个扩展,它可以潜在地提供比 C/C++ 扩展更准确的 C++ 智能感知配置。例如,对于 CMake 或 Make 构建系统,Makefile 工具CMake 工具 扩展可以是配置提供者。要将扩展添加为配置提供者,可以通过配置快速选择来选择扩展,通过编辑 配置提供者 字段在 高级设置 下将它添加到配置 UI,或者添加 配置提供者字段到你的c_cpp_properties.json文件。例如,对于 CMake 扩展,需要添加的路径是ms-vscode.cmake-tools输入:.

C/C++ 高级设置配置提供者

C/C++ 扩展会扫描您的系统以查找自定义配置提供程序。如果仅识别一个自定义配置提供程序,则此配置提供程序将自动配置为 IntelliSense。如果有多个配置提供程序被识别,您需要通过打开配置快速选择来选择扩展应使用哪个。

编译命令文件.json

另一种提供IntelliSense配置的方法是compile_commands.json文件,该文件描述了项目中每个文件的确切编译命令。这个文件通常是由构建系统(如CMake或Bazel)在配置项目时通过设置命令行参数生成的。编译命令.json 文件可以通过与如何配置IntelliSense章节中讨论的相同方法通过配置快速选择、通过UI编辑配置或编辑c_cpp_properties.json 直接文件。在配置用户界面中,可以在 高级配置 下添加文件,并在 编译命令 字段中。例如,如果您的 编译命令.json文件在你的工作区根目录下,输入${workspaceFolder}/compile_commands.json在编译命令字段中。否则,它可以被添加到c_cpp_properties.json直接使用文件编译命令配置属性。

如果编译命令数据库不包含与您在编辑器中打开的文件相对应的翻译单元条目,您的基本配置(位于c_cpp_properties.json) 被使用 (例如你的包含路径定义) 如果 C/C++ 扩展恢复到基本配置,语言状态栏指示器 会在状态栏中显示 配置 IntelliSense 标签。

如果你指定了自定义配置提供程序和一个编译命令.json文件,首先查询自定义配置提供者以获取IntelliSense配置。

如果你的程序包含不在工作区或标准库路径中的头文件,你可以修改包含路径。C/C++ 扩展通过查询由编译器路径指定的编译器来填充包含路径。如果扩展无法找到目标系统库的路径,你可以手动输入包含路径。

检查使用语言状态栏的IntelliSense活动

你可以使用语言状态栏来确定IntelliSense是否正在处理你的文件。要调用语言状态栏,请打开一个C++文件。状态栏显示文本{} C++。将鼠标悬停在{}符号上以打开语言状态栏的弹出菜单。弹出菜单的最顶项表示IntelliSense的状态。以下是不同的状态及其含义:

  • IntelliSense: 准备就绪 = IntelliSense 已为 C/C++ 扩展配置,并且如果您与编辑器进行交互(例如编写代码),将自动激活。
  • IntelliSense: 正在更新 = IntelliSense 正在积极地根据您对代码所做的更改来确定任何代码完成、语法突出显示等。

C++ 扩展语言状态栏弹出Windows

您可以在语言状态栏弹出菜单中任意项目右侧选择钉图图标,将其永久固定到您的状态栏。

下一步