配置 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++扩展会在状态栏中显示一个带有警告标志的黄色指示器,标记为配置IntelliSense

在状态栏中配置IntelliSense指示器

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

如果您没有看到状态栏指示器,您还可以检查项目的c_cpp_properties.json文件。此文件存储了所有IntelliSense配置设置。通过从命令面板选择C/C++: 编辑配置 (UI)来导航到此文件(⇧⌘P (Windows, Linux Ctrl+Shift+P))。检查IntelliSense模式以找到您的配置。要了解更多关于c_cpp_properties.json文件的信息,您可以查看模式参考

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

如何配置IntelliSense

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

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

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

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

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

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

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

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

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

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

选项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)命令

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

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

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

> Sample c_cpp_configuration.json on Windows

使用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
}

> Sample c_cpp_configuration.json on macOS
Using the default install path for 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
}

> Sample c_cpp_configuration.json on Linux
Using the default install path for 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扩展可以作为配置提供者。要将扩展添加为配置提供者,可以通过配置快速选择选择扩展,通过编辑高级设置下的配置提供者字段将其添加到配置UI中,或者将configurationProvider字段添加到c_cpp_properties.json文件中。例如,对于CMake扩展,添加的路径将是ms-vscode.cmake-tools

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

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

compile_commands.json 文件

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

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

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

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

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

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

  • IntelliSense: 准备就绪 = IntelliSense 已为 C/C++ 扩展配置,并在您与编辑器交互时自动激活,例如编写代码时。
  • IntelliSense: 更新中 = IntelliSense 正在积极工作,根据您对代码所做的更改来确定任何代码补全、语法高亮等。

C++扩展语言状态栏弹出窗口

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

下一步