配置 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)(Windows,Linux Ctrl+Shift+P)进入该文件。检查一下IntelliSense 模式找到你的配置。

命令调色板在C/C++ Edit Configurations命令中过滤

如何配置IntelliSense

IntelliSense 配置存储在c_cpp_properties.json文件,这些文件会自动在你的工作区中创建。以下三种选项都是编辑c_cpp_properties.json文件:

选项一。通过配置快速选择选择配置选项

通过在命令面板中输入“选择IntelliSense 配置”(⇧⌘P(Windows,Linux Ctrl+Shift+P)打开快速选择,该选项会显示你电脑上C/C++扩展的所有配置选项下拉菜单。

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

选择可选选项之一。如果你选择编译器,IntelliSense 默认会使用该编译器。你可以随时返回配置IntelliSense快速选择,更改配置IntelliSense的选项。

如果快速选择中没有选项,那么你的系统中无法识别任何编译器。你可以手动浏览电脑,也可以安装C/C++编译器。要在Windows机器上安装,选择“帮助我安装编译器”选项,该选项会跳转到安装C/C++编译器的逐步教程。在macOS或Linux机器上,选择“安装编译器”,然后通过提示导航,在你的机器上安装C++编译器。

选项二。通过界面编辑你的IntelliSense配置

通过命令面板中选择 C/C++:编辑配置(UI)(Windows,Linux Ctrl+Shift+P)打开你的 IntelliSense 配置。此视图是c_cpp_properties.json档案。

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

编译器路径字段设置为你用来构建项目的编译器的完整路径。例如,在Linux上使用GCC的默认安装路径时,编译器路径为/usr/bin/gcc.把 IntelliSense 模式设置为你所用编译器的架构专用版本。

选项三。直接编辑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"
    }
  ],
  "version": 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,
        "databaseFilename": ""
      }
    }
  ],
  "version": 4
}

项目级 IntelliSense 配置

用编译器配置IntelliSense为你提供了核心的IntelliSense功能。这种设置称为基础配置。对于更复杂的使用场景,比如搭建需要:

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

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

  • c_cpp_properties.json文件及相关设置
  • 以另一个VS Code扩展形式出现的自定义配置提供者(例如,Makefile ToolsCMake Tools扩展)
  • Acompile_commands.json文件

配置提供者

自定义配置提供者是VS Code中的另一种扩展,可能比C/C++扩展更准确地提供C++ IntelliSense配置。例如,对于 CMake 或 Make 构建系统,Makefile 工具CMake 工具扩展可以作为配置提供者。要将扩展添加为配置提供者,可以通过配置快速选择选择该扩展,或通过在高级设置中编辑配置提供者字段将其添加到配置界面,或者添加configurationProvider(配置提供者)田野到你的c_cpp_properties.json档案。例如,对于CMake扩展,添加路径为ms-vscode.cmake-tools.

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

C/C++ 扩展会扫描你的系统,寻找自定义配置提供者。如果只识别一个自定义配置提供者,该配置提供者会自动配置用于IntelliSense。如果识别了多个配置提供者,你需要通过打开配置快速选择来选择扩展应该使用哪一个。

compile_commands.json文件

另一种提供 IntelliSense 配置的选项是 compile_commands.json 文件,描述项目中每个文件所使用的具体编译命令。该文件通常由构建系统(如 CMake 或 Bazel)生成,通过在配置项目时设置命令行参数。Acompile_commands.json文件可以通过“如何配置IntelliSense”部分中讨论的配置快速选择选择,通过UI编辑配置,或编辑c_cpp_properties.json直接归档。在配置界面中,可以将文件添加到高级配置编译命令字段中。例如,如果你的compile_commands.json文件在你工作区的根节点,输入${workspaceFolder}/compile_commands.json编译命令字段中。否则,它可以被添加到c_cpp_properties.json直接通过compile命令配置属性。

如果编译命令数据库中没有对应你在编辑器中打开的文件的翻译单元条目,那么你的基础配置(在c_cpp_properties.json) 被使用includePath以及定义).如果 C/C++ 扩展恢复为基础配置,语言状态栏指示器会在状态栏显示“配置 IntelliSense”标签。

如果你指定了一个自定义配置提供商和compile_commands.jsonfile,首先查询IntelliSense配置的自定义配置提供者。

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

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

您可以通过语言状态栏判断 IntelliSense 是否正在对你的文件进行工作。要调用语言状态栏,请打开一个 C++ 文件。状态栏显示文本 {} C++。将鼠标悬停在 {} 符号上即可打开语言状态栏的跳出窗口。飞出图顶部的项目表示IntelliSense状态。以下是不同的身份及其含义:

  • IntelliSense:Ready = IntelliSense 是为 C/C++ 扩展配置的,如果你通过编写代码与编辑器交互,它会自动激活。
  • IntelliSense:更新 = IntelliSense 会根据你对代码所做的更改,积极确定代码补全、语法高亮等。

C++ 扩展语言状态栏跳出

你可以选择语言状态栏中任何项目右侧的针脚图标,将其永久固定到状态栏。

下一步