設定 C/C++ IntelliSense

本文旨在說明如何設定 C/C++ 擴充功能,以便在 Visual Studio Code 中提供 C++ 專屬的 IntelliSense 建議。IntelliSense 是內建於 VS Code 中的實用工具,提供多種程式碼編輯功能,協助您更快速、更有效地編寫程式。例如,程式碼自動完成、參數資訊、語法標示、程式碼動作(燈泡圖示)以及成員列表,都是透過 IntelliSense 所產生。

C/C++ IntelliSense 僅要求您的系統中必須安裝 C/C++ 編譯器。C/C++ 編譯器會為 IntelliSense 提供 C++ 專屬資訊,例如系統 include 路徑的位置與其他設定。關於專案層級的設定,請參考專案層級的 IntelliSense 設定章節。

C/C++ 擴充功能何時會為我設定核心 IntelliSense 功能?

編譯器是設定核心 IntelliSense 功能的唯一必要條件。為了識別 IntelliSense 所需的編譯器,C/C++ 擴充功能會掃描您機器上的常見路徑,以尋找 Clang、GCC、MinGW、cygwin、cygwin64 和 MSVC 等編譯器。如果系統識別出上述任一編譯器且位於安全位置,它們將會被自動設定給 IntelliSense 使用。否則,系統會顯示通知,要求您確認是否應將此編譯器設定為 IntelliSense 使用。無論是哪種情況,所選的編譯器也會被設為預設編譯器。

如何檢查 IntelliSense 是否已設定

如果您尚未設定 IntelliSense,C/C++ 擴充功能會在狀態列顯示一個帶有警告標誌的黃色指示燈,標記為 Configure IntelliSense(設定 IntelliSense)

Configure IntelliSense indicator in the status bar

若要進行設定,請選取狀態列上的該指示燈,這會開啟設定快速選取 (Quick Pick)。快速選取功能可協助您選擇或安裝 C/C++ 編譯器。

如果您沒有看到狀態列指示燈,也可以檢查專案的 c_cpp_properties.json 檔案。此檔案儲存了您所有的 IntelliSense 設定。若要前往此檔案,請從命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))選取 C/C++: Edit Configurations (UI)(編輯設定 (UI))。檢查 IntelliSense mode 以確認目前的設定。

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))中輸入 Select IntelliSense Configuration(選擇 IntelliSense 設定) 以開啟快速選取,這會顯示一個下拉式選單,列出 C/C++ 擴充功能在您的機器上找到的所有設定選項。

Select a compiler to configure for IntelliSense Quick Pick

選擇其中一個可用選項。如果您選擇了某個編譯器,IntelliSense 預設將會使用該編譯器。您可以隨時返回 Configure IntelliSense(設定 IntelliSense) 快速選取介面,更改用於設定 IntelliSense 的選項。

如果在快速選取中沒有可用選項,則代表系統無法識別出任何編譯器。您可以手動瀏覽您的機器或安裝 C/C++ 編譯器。若要在 Windows 機器上安裝,請選取 Help me install a compiler(協助我安裝編譯器) 選項,這將引導您至安裝 C/C++ 編譯器的逐步教學。在 macOS 或 Linux 機器上,請選取 Install a compiler(安裝編譯器) 並依照提示完成機器的 C++ 編譯器安裝。

選項 2:透過 UI 編輯您的 IntelliSense 設定

透過命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))選取 C/C++: Edit Configurations (UI)(編輯設定 (UI)) 來開啟 IntelliSense 設定。此檢視畫面為 c_cpp_properties.json 檔案的使用者介面。

C/C++ IntelliSense Configurations user interface

Compiler path(編譯器路徑) 欄位設定為您用來建置專案之編譯器的完整路徑。例如,在 Linux 上使用 GCC 的預設安裝路徑時,編譯器路徑為 /usr/bin/gcc。將 IntelliSense mode(IntelliSense 模式) 設定為您所使用編譯器的架構特定變體。

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

您可以直接編輯 c_cpp_properties.json 檔案來自訂您的設定。請從命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))使用 C/C++: Edit Configurations (JSON)(編輯設定 (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 功能。此設定稱為基礎設定。若為更複雜的使用情境,例如設定需要以下內容的專案:

  • 額外的 include 路徑,例如對一個或多個不同程式庫的參照
  • 會影響語言行為(進而影響 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 的 Advanced Settings(進階設定) 下編輯 Configuration provider(設定提供者) 欄位,或者將 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 中,該檔案可以在 Advanced Configurations(進階設定) 下的 Compile commands(編譯指令) 欄位中加入。例如,如果您的 compile_commands.json 檔案位於工作區根目錄,請在 Compile commands 欄位中輸入 ${workspaceFolder}/compile_commands.json。否則,也可以直接使用 compileCommands 設定屬性將其加入 c_cpp_properties.json 檔案中。

如果編譯指令資料庫中不包含您在編輯器中開啟檔案所對應的轉譯單元項目,則會改用您的基礎設定(位於 c_cpp_properties.json,例如您的 includePathdefines)。如果 C/C++ 擴充功能還原為基礎設定,語言狀態列指示燈會在狀態列中顯示 Configure IntelliSense(設定 IntelliSense) 標籤。

如果您同時指定了自訂設定提供者與 compile_commands.json 檔案,系統會優先查詢自訂設定提供者以取得 IntelliSense 設定。

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

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

您可以透過語言狀態列判斷 IntelliSense 是否正在您的檔案上進行活動。若要呼叫語言狀態列,請開啟一個 C++ 檔案。狀態列會顯示 {} C++ 文字。將游標懸停在 {} 符號上,即可開啟語言狀態列的浮動視窗。浮動視窗中的最上方項目會顯示 IntelliSense 的狀態。以下是各個狀態及其意義:

  • IntelliSense: Ready(就緒) = IntelliSense 已針對 C/C++ 擴充功能完成設定,並會在您與編輯器互動(例如編寫程式碼)時自動啟用。
  • IntelliSense: Updating(正在更新) = IntelliSense 正在根據您對程式碼所做的變更,主動計算任何程式碼自動完成、語法標示等項目。

C++ extension language status bar flyout

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

後續步驟

© . This site is unofficial and not affiliated with Microsoft.