配置 C/C++ IntelliSense

本文旨在介绍如何配置 C/C++ 扩展,以便在 Visual Studio Code 中提供特定于 C++ 的 IntelliSense 建议。IntelliSense 是 VS Code 内置的一个实用工具,提供了多种代码编辑功能,帮助您更快、更高效地编写代码。例如,代码补全、参数信息、语法高亮、代码操作(灯泡图标)和成员列表都是使用 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++ 扩展会在状态栏中显示一个带黄色警告标志的指示器,标记为 Configure IntelliSense(配置 IntelliSense)

Configure IntelliSense indicator in the status bar

要进行配置,请选择该状态栏指示器,这将调出配置快速选择 (Quick Pick)。该快速选择功能可以帮助您选择或安装 C/C++ 编译器。

如果您没有看到状态栏指示器,也可以检查项目的 c_cpp_properties.json 文件。该文件存储了您所有的 IntelliSense 配置设置。通过命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))选择 C/C++: Edit Configurations (UI)(C/C++: 编辑配置 (UI))即可访问此文件。检查 IntelliSense mode(IntelliSense 模式) 以查找您的配置。

Command Palette filtered on C/C++ Edit Configurations command

如何配置 IntelliSense

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

选项 1:通过配置快速选择 (Quick Pick) 选择配置选项

通过在命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))中输入 Select IntelliSense Configuration(选择 IntelliSense 配置)来打开快速选择,它会显示一个下拉菜单,其中包含 C/C++ 扩展在您机器上找到的所有配置选项。

Select a compiler to configure for IntelliSense Quick Pick

选择其中一个可用选项。如果您选择了一个编译器,该编译器将默认被 IntelliSense 使用。您可以随时返回到 Configure IntelliSense(配置 IntelliSense) 快速选择来更改用于配置 IntelliSense 的选项。

如果快速选择中没有可用选项,则说明未在您的系统中识别出编译器。您可以手动浏览您的机器或安装 C/C++ 编译器。若要在 Windows 机器上安装,请选择 Help me install a compiler(帮助我安装编译器) 选项,该选项会引导您查看如何安装 C/C++ 编译器的分步指南。在 macOS 或 Linux 机器上,选择 Install a compiler(安装编译器) 并按照提示在您的机器上安装 C++ 编译器。

选项 2:通过 UI 编辑您的 IntelliSense 配置

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

C/C++ IntelliSense Configurations user interface

Compiler path(编译器路径) 字段设置为您用于构建项目的编译器的完整路径。例如,在 Linux 上使用 GCC 的默认安装路径时,编译器路径为 /usr/bin/gcc。将 IntelliSense mode(IntelliSense 模式) 设置为您所使用编译器的特定架构变体。

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

您可以直接编辑 c_cpp_properties.json 文件以自定义配置。使用命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))中的 C/C++: Edit Configurations (JSON)(C/C++: 编辑配置 (JSON)) 命令,c_cpp_properties.json 文件即会在您工作区的 .vscode 文件夹中创建。

Command Palette filtered on C/C++ Edit Configurations (JSON) command

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

有关 c_cpp_properties.json 文件的更多信息,请查看架构参考

根据您的操作系统选择下面的示例,以获取 c_cpp_properties.json 文件:

> Windows 上的 c_cpp_properties.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_properties.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"
    }
  ],
  "version": 4
}

> Linux 上的 c_cpp_properties.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,
        "databaseFilename": ""
      }
    }
  ],
  "version": 4
}

项目级 IntelliSense 配置

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

  • 额外的包含路径,例如引用一个或多个不同的库
  • 影响语言行为(从而影响 IntelliSense)的特定编译器参数

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

  • c_cpp_properties.json 文件及相关设置
  • 以另一个 VS Code 扩展形式存在的自定义配置提供程序(例如 Makefile ToolsCMake Tools 扩展)
  • compile_commands.json 文件

配置提供程序

自定义配置提供程序是 VS Code 中的另一个扩展,它可能比 C/C++ 扩展提供更准确的 C++ IntelliSense 配置。例如,对于 CMake 或 Make 构建系统,Makefile ToolsCMake Tools 扩展可以作为配置提供程序。要将扩展添加为配置提供程序,请通过配置快速选择选择该扩展,通过编辑 Advanced Settings(高级设置) 下的 Configuration provider(配置提供程序) 字段将其添加到配置 UI,或者将 configurationProvider 字段添加到您的 c_cpp_properties.json 文件中。例如,对于 CMake 扩展,要添加的路径为 ms-vscode.cmake-tools

C/C++ Advanced Settings Configuration provider

C/C++ 扩展会扫描您的系统以查找自定义配置提供程序。如果仅识别出一个自定义配置提供程序,该提供程序会自动为 IntelliSense 进行配置。如果识别出多个配置提供程序,您需要打开配置快速选择来选择扩展应使用的那个。

compile_commands.json 文件

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

如果编译命令数据库中不包含您在编辑器中打开的文件对应的翻译单元条目,则会改用您的基本配置(位于 c_cpp_properties.json 中,例如您的 includePathdefines)。如果 C/C++ 扩展回退到基本配置,语言状态栏指示器会在状态栏中显示标签 Configure IntelliSense(配置 IntelliSense)

如果您指定了自定义配置提供程序和 compile_commands.json 文件,则首先会查询自定义配置提供程序以获取 IntelliSense 配置。

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

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

您可以使用语言状态栏确定 IntelliSense 是否正在您的文件上主动工作。要调用语言状态栏,请打开一个 C++ 文件。状态栏会显示文本 {} C++。将鼠标悬停在 {} 符号上以打开语言状态栏浮窗。浮窗顶部的项目指示 IntelliSense 状态。以下是各种状态及其含义:

  • IntelliSense: Ready(就绪) = IntelliSense 已为 C/C++ 扩展配置完毕,并在您与编辑器交互(例如编写代码)时自动激活。
  • IntelliSense: Updating(正在更新) = IntelliSense 正在根据您对代码所做的更改主动工作,以确定任何代码补全、语法高亮等信息。

C++ extension language status bar flyout

您可以选择语言状态栏浮窗中任何项目右侧的图钉图标,将其永久固定到状态栏上。

后续步骤

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