配置 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**”。

要进行配置,请选择状态栏指示器,这将打开“配置快速选择”。快速选择可以帮助您选择或安装 C/C++ 编译器。
如果未看到状态栏指示器,您也可以检查项目的 c_cpp_properties.json 文件。此文件存储了所有 IntelliSense 配置设置。通过从命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))中选择“**C/C++: 编辑配置(UI)**”来导航到此文件。检查 IntelliSense mode 以查找您的配置。

如何配置 IntelliSense
IntelliSense 配置存储在 c_cpp_properties.json 文件中,该文件会自动在您的工作区中创建。以下所有三种选项都是编辑 c_cpp_properties.json 文件的不同方法。
选项 1. 通过配置快速选择选择配置选项
通过在命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))中输入“**选择 IntelliSense 配置**”来打开快速选择。它会显示一个下拉列表,其中包含 C/C++ 扩展在您计算机上找到的所有配置选项。

选择其中一个可用选项。如果选择了一个编译器,IntelliSense 默认将使用该编译器。您可以随时返回“**配置 IntelliSense**”快速选择来更改用于配置 IntelliSense 的选项。
如果在快速选择中没有可用选项,说明您的系统中未识别到任何编译器。您可以手动浏览计算机或安装 C/C++ 编译器。要在 Windows 计算机上安装,请选择“**帮助我安装编译器**”选项,它将重定向到关于如何安装 C/C++ 编译器的分步指南。在 macOS 或 Linux 计算机上,选择“**安装编译器**”并按照提示操作,以便在您的计算机上安装 C++ 编译器。
选项 2. 通过 UI 编辑 IntelliSense 配置
通过从命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))中选择“**C/C++: 编辑配置(UI)**”来打开 IntelliSense 配置。此视图是 c_cpp_properties.json 文件的用户界面。

将“**编译器路径**”字段设置为您用于构建项目的编译器的完整路径。例如,在 Linux 上使用 GCC 的默认安装路径时,编译器路径为 /usr/bin/gcc。将“**IntelliSense mode**”设置为您使用的编译器的特定架构变体。
选项 3. 直接编辑 c_cpp_properties.json 文件
您可以直接编辑 c_cpp_properties.json 文件来自定义您的配置。使用命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))中的“**C/C++ 编辑配置(JSON)**”命令,然后 c_cpp_properties.json 文件将在您工作区的 .vscode 文件夹中创建。

使用 compilerPath 变量来添加编译器。此变量是您用于构建项目的编译器的完整路径。例如,在 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 Tools 或 CMake Tools 扩展)
compile_commands.json文件
配置提供程序
自定义配置提供程序是 VS Code 中的另一个扩展,它可能提供比 C/C++ 扩展更准确的 C++ IntelliSense 配置。例如,对于 CMake 或 Make 构建系统,Makefile Tools 或 CMake Tools 扩展可以作为配置提供程序。要将扩展添加为配置提供程序,请通过配置快速选择来选择该扩展,或者通过编辑“**高级设置**”下的“**配置提供程序**”字段来将其添加到配置 UI,或者将 configurationProvider 字段添加到您的 c_cpp_properties.json 文件中。例如,对于 CMake 扩展,要添加的路径是 ms-vscode.cmake-tools。

C/C++ 扩展会扫描系统中的自定义配置提供程序。如果它只识别出一个自定义配置提供程序,此配置提供程序就会自动配置为 IntelliSense 使用。如果识别出多个配置提供程序,您需要通过打开“配置快速选择”来选择扩展应使用哪个。
compile_commands.json 文件
提供 IntelliSense 配置的另一种选项是 compile_commands.json 文件,它描述了项目中每个文件使用的确切编译命令。此文件通常由构建系统(如 CMake 或 Bazel)生成,方法是在配置项目时设置命令行参数。可以通过与 如何配置 IntelliSense 部分中讨论的相同方法,通过配置快速选择、通过 UI 编辑配置或直接编辑 c_cpp_properties.json 文件来选择 compile_commands.json 文件进行配置。在配置 UI 中,可以在“**高级配置**”下的“**编译命令**”字段中添加该文件。例如,如果您的 compile_commands.json 文件位于工作区的根目录,请在“**编译命令**”字段中输入 ${workspaceFolder}/compile_commands.json。否则,可以使用 compileCommands 配置属性直接将其添加到 c_cpp_properties.json 文件中。
如果编译命令数据库不包含与您在编辑器中打开的文件对应的翻译单元的条目,则会改用您的基本配置(在 c_cpp_properties.json 中找到,例如您的 includePath 和 defines)。如果 C/C++ 扩展回退到基本配置,状态栏中的语言状态指示器将显示“**配置 IntelliSense**”标签。
如果您指定了一个自定义配置提供程序和一个 compile_commands.json 文件,则会首先查询自定义配置提供程序以获取 IntelliSense 配置。
如果您的程序包含不在您的工作区中或不在标准库路径中的头文件,您可以修改“**包含路径**”。C/C++ 扩展通过查询“**编译器路径**”指定的编译器来填充包含路径。如果扩展找不到目标系统库的路径,您可以手动输入包含路径。
使用语言状态栏检查 IntelliSense 活动
您可以使用语言状态栏来确定 IntelliSense 是否正在您的文件上积极工作。要调用语言状态栏,请打开 C++ 文件。状态栏将显示文本“**{} C++**”。将鼠标悬停在“**{}**”符号上以打开语言状态栏弹出窗口。弹出窗口中的第一个项目指示 IntelliSense 状态。以下是不同的状态及其含义:
- “**IntelliSense: 就绪**” = IntelliSense 已为 C/C++ 扩展配置好,并在您与编辑器交互时(例如,编写代码时)自动激活。
- “**IntelliSense: 更新中**” = IntelliSense 正在根据您对代码所做的更改,积极地确定任何代码补全、语法高亮等。

您可以选择语言状态栏弹出窗口中任意项目的右侧的图钉图标,将其永久固定到您的状态栏。
后续步骤
- 有关 IntelliSense 配置的更多信息,请参阅 自定义默认设置。
- 如果您在配置设置时遇到问题,请在 GitHub 讨论区发起讨论,或者如果您发现需要修复的问题,请在 GitHub 问题区提交问题。
- 浏览 c_cpp_properties 架构。
- 查看 C++ 扩展概述。