設定 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 的警告符號。
若要設定,請選取狀態列指示器,這會帶出設定快速選取。快速選取可協助您選取或安裝 C/C++ 編譯器。
如果您沒有看到狀態列指示器,您也可以檢查專案的 c_cpp_properties.json
檔案。此檔案會儲存您的所有 IntelliSense 設定。透過從命令選擇區 (⇧⌘P (Windows、Linux Ctrl+Shift+P)) 選取 C/C++: 編輯組態 (UI) 來導覽至此檔案。檢查 IntelliSense 模式
以尋找您的設定。若要深入瞭解 c_cpp_properties.json
檔案,您可以檢閱結構描述參考。
如何設定 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 模式 設定為您使用的編譯器的架構特定變體。
選項 3. 直接編輯 c_cpp_properties.json 檔案
您可以直接編輯 c_cpp_properties.json
檔案來自訂您的設定。從命令選擇區 (⇧⌘P (Windows、Linux Ctrl+Shift+P)) 使用 C/C++ 編輯組態 (JSON) 命令,然後在工作區的 .vscode
資料夾中建立 c_cpp_properties.json
檔案。
使用 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++ 擴充功能概觀。