參加你附近的 ,瞭解 VS Code 中的 AI 輔助開發。

配置 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 的警告標誌。

Configure IntelliSense indicator in the status bar

要進行配置,請選擇狀態列指示器,這將調出配置快速選擇。快速選擇可以幫助您選擇或安裝一個 C/C++ 編譯器。

如果您沒有看到狀態列指示器,您也可以檢查您專案的 c_cpp_properties.json 檔案。此檔案儲存了您所有的 IntelliSense 配置設定。透過從命令面板 (⇧⌘P (Windows, Linux Ctrl+Shift+P)) 中選擇 C/C++: 編輯配置 (UI) 來導航到此檔案。檢查 IntelliSense 模式以找到您的配置。要了解有關 c_cpp_properties.json 檔案的更多資訊,您可以查閱架構參考

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

如何配置 IntelliSense

IntelliSense 配置儲存在 c_cpp_properties.json 檔案中,該檔案會自動在您的工作區中建立。以下所有三個選項都是編輯 c_cpp_properties.json 檔案的不同方式。

選項 1:透過配置快速選擇來選擇一個配置選項

透過在命令面板 (⇧⌘P (Windows, Linux Ctrl+Shift+P)) 中輸入選擇 IntelliSense 配置來開啟快速選擇,它會顯示一個下拉列表,其中包含 C/C++ 擴充套件在您機器上找到的所有配置選項。

Select a compiler to configure for IntelliSense Quick Pick

選擇一個可用的選項。如果您選擇了一個編譯器,該編譯器將預設用於 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 檔案的使用者介面。

C/C++ IntelliSense Configurations user interface

編譯器路徑欄位設定為您用於構建專案的編譯器的完整路徑。例如,當在 Linux 上使用 GCC 的預設安裝路徑時,編譯器路徑是 /usr/bin/gcc。將 IntelliSense 模式設定為您正在使用的編譯器的特定於體系架構的變體。

選項 3:直接編輯 c_cpp_properties.json 檔案

您可以直接編輯 c_cpp_properties.json 檔案來自定義您的配置。使用命令面板 (⇧⌘P (Windows, Linux Ctrl+Shift+P)) 中的 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_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 擴充套件)
  • 一個 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++ Advanced Settings Configuration provider

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: Ready = IntelliSense 已為 C/C++ 擴充套件配置,並且如果您與編輯器互動(例如編寫程式碼),它將自動啟用。
  • IntelliSense: Updating = IntelliSense 正在根據您對程式碼所做的更改積極地確定任何程式碼補全、語法高亮等。

C++ extension language status bar flyout

您可以選擇語言狀態列浮出控制元件中任何專案右側的圖釘圖示,將其永久固定到您的狀態列。

後續步驟