🚀 在 VS Code 中免費取得

設定 C/C++ IntelliSense

本文說明如何設定 C/C++ 擴充功能,以在 Visual Studio Code 中提供 C++ 專用的 IntelliSense 建議。IntelliSense 是 VS Code 內建的實用工具,提供各種程式碼編輯功能,協助您更快速且更有效率地撰寫程式碼。例如,程式碼完成、參數資訊、語法醒目提示、程式碼動作 (燈泡) 和成員清單都是使用 IntelliSense 產生的。

C/C++ IntelliSense 僅需要在您的系統上安裝 C/C++ 編譯器。C/C++ 編譯器會提供 C++ 專用資訊給 IntelliSense,例如系統包含路徑和其他設定的位置。如需專案層級設定,請參考「專案層級 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 設定。透過從命令面板選取「C/C++:編輯組態 (UI)」來導覽至此檔案 (⇧⌘P (Windows、Linux Ctrl+Shift+P))。檢查 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. 透過設定快速選取選取設定選項

在命令面板中輸入「選取 IntelliSense 設定」 (⇧⌘P (Windows、Linux Ctrl+Shift+P)) 開啟快速選取,這會顯示一個下拉式清單,其中包含 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 設定

透過從命令面板選取「C/C++:編輯組態 (UI)」 (⇧⌘P (Windows、Linux Ctrl+Shift+P)) 開啟您的 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 檔案來自訂您的設定。使用命令面板中的「C/C++:編輯組態 (JSON)」命令 (⇧⌘P (Windows、Linux Ctrl+Shift+P)),然後會在您工作區的 .vscode 資料夾中建立 c_cpp_properties.json 檔案。

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 工具CMake 工具擴充功能)
  • compile_commands.json 檔案

設定提供者

自訂設定提供者是 VS Code 中的另一個擴充功能,它可能比 C/C++ 擴充功能提供更精確的 C++ IntelliSense 設定。例如,對於 CMake 或 Make 建置系統,Makefile 工具CMake 工具擴充功能可以是設定提供者。若要新增擴充功能作為設定提供者,請透過設定快速選取選取擴充功能,透過編輯「進階設定」下的「設定提供者」欄位將其新增至設定 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」章節中討論的相同方法,透過設定快速選取、透過 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 中找到) (例如您的 includePathdefines)。如果 C/C++ 擴充功能還原為基本設定,則 語言狀態列指示器會在狀態列中顯示標籤「設定 IntelliSense」。

如果您指定了自訂設定提供者和 compile_commands.json 檔案,則會先查詢自訂設定提供者以取得 IntelliSense 設定。

如果您的程式包含不在您的工作區中或不在標準程式庫路徑中的標頭檔,您可以修改「包含路徑」。C/C++ 擴充功能會透過查詢「編譯器路徑」指定的編譯器來填入包含路徑。如果擴充功能找不到目標系統程式庫的路徑,您可以手動輸入包含路徑。

使用語言狀態列檢查 IntelliSense 活動

您可以使用語言狀態列判斷 IntelliSense 是否正在您的檔案上積極運作。若要叫用語言狀態列,請開啟 C++ 檔案。狀態列會顯示文字「{} C++」。將滑鼠游標停留在「{}」符號上方以開啟語言狀態列浮出視窗。浮出視窗中的頂端項目會指出 IntelliSense 狀態。以下是不同的狀態及其意義

  • IntelliSense:就緒 = IntelliSense 已針對 C/C++ 擴充功能設定,如果您與編輯器互動 (例如,撰寫程式碼),則會自動啟動。
  • IntelliSense:更新中 = IntelliSense 正在積極運作,以根據您對程式碼所做的變更來判斷任何程式碼完成、語法醒目提示等。

C++ extension language status bar flyout

您可以選取語言狀態列浮出視窗中任何項目右側的釘選圖示,將其永久釘選到您的狀態列。

後續步驟