共用方式為


為 IntelliSense 設定 C++ 專案

在某些情況下,您可能需要手動設定C++專案,讓IntelliSense正常運作。 針對 MSBuild 專案(根據.vcxproj檔案),您可以調整專案屬性中的設定。 針對非 MSBuild 專案,您可以調整專案根目錄中 CppProperties.json 檔案中的設定。 在某些情況下,您可能需要建立提示檔案,以協助 IntelliSense 瞭解巨集定義。 Visual Studio IDE 可協助您找出並修正 IntelliSense 問題。

單一檔案 IntelliSense

當您開啟一個不屬於專案的檔案時,Visual Studio 會提供一些 IntelliSense 支援,但預設不會顯示錯誤波浪線。 如果 導覽列上 顯示 [其他檔案],這可能是說明為什麼您在不正確的程式碼下看不到錯誤紅色波浪線,或為什麼預處理器巨集未被定義的原因。

檢查錯誤清單

如果檔案在單一檔案模式中未開啟,且 IntelliSense 無法正常運作,則第一個檢查位置是 [錯誤清單] 視窗。 若要查看目前原始程式檔的所有 IntelliSense 錯誤,以及所有包含的頭檔,請在下拉式清單中選擇 [建置 + IntelliSense]

錯誤清單中的 VC++ IntelliSense

IntelliSense 最多會產生 1000 個錯誤。 如果來源檔案所包含的標頭檔案錯誤數量超過 1000 個,則只在檔案開頭顯示單一錯誤波浪線。

確定 #include 路徑正確

MSBuild 專案

如果您在 Visual Studio IDE 外部執行組建,而且您的組建成功,但 IntelliSense 不正確,您的命令行可能會與一或多個組態的項目設定不同步。 以滑鼠右鍵按兩下 [方案總管] 中的項目節點,並確定目前組態和平臺的所有 #include 路徑都正確。 如果路徑在所有組態和平臺中都相同,您可以選取 [所有組態][所有平臺],確認路徑正確無誤。

VC++ 包含目錄

若要查看建置巨集的目前值,例如 VC_IncludePath,請先選擇 [包含目錄] 項目,然後按一下右側的下拉式清單。 然後選擇 <編輯>,然後點擊 巨集 按鈕。

Makefile 專案

針對以 NMake 專案範本為基礎的 Makefile 項目,選擇左窗格中的 NMake,然後在 IntelliSense 類別下選擇 包含搜尋路徑

Makefile 專案包含路徑

開啟資料夾專案功能

針對 CMake 專案,請確定已針對 CMakeLists.txt中的所有組態正確指定 #include 路徑。 其他項目類型可能需要 CppProperties.json 檔案。 如需詳細資訊,請參閱 使用 CppProperties.json設定 IntelliSense。 請確定檔案中所定義之每個組態的路徑都正確無誤。

如果 CppProperties.json 檔案中有語法錯誤,受影響檔案中的 IntelliSense 將會不正確。 Visual Studio 會在 [輸出] 視窗中顯示錯誤。

標籤解析問題

標籤解析器是一種用於瀏覽和導航的「模糊」C++解析器。 它非常快速,但不會嘗試完全理解每個程式代碼建構。

例如,它不會評估預處理器巨集,因此可能會錯誤地剖析大量使用這些巨集的程序代碼。 當標籤剖析器遇到不熟悉的程式代碼建構時,可能會略過整個程式代碼區域。

在Visual Studio中,有兩種常見的方式會說明此問題:

  1. 如果導覽列顯示最內層的巨集,則會略過目前的函式定義:

    標記剖析器會略過函式定義

  2. IDE 提供為已定義的函式建立函式定義:

    標記剖析器可用來定義現有的函式

若要修正這類問題,請將名為 cpp.hint 的檔案新增至解決方案目錄的根目錄。 如需詳細資訊,請參閱 提示檔案

標籤剖析器錯誤會出現在 錯誤清單 視窗中。

使用診斷記錄來驗證項目設定

若要檢查 IntelliSense 編譯程式是否使用正確的編譯器選項,包括包含路徑和預處理器巨集,請在 工具 > 選項 > 文字編輯器 > C/C++ > 進階 > 診斷日誌中開啟 IntelliSense 命令列的診斷日誌。 將 記錄啟用 設定為 True,將 記錄層級 設定為 5(最詳細資訊),並將 記錄篩選 設定為 8(IntelliSense 記錄)。

[輸出視窗] 現在會顯示傳遞至 IntelliSense 編譯程式的命令行。 以下是範例輸出:

[IntelliSense] Configuration Name: Debug|Win32
[IntelliSense] Toolset IntelliSense Identifier:
[IntelliSense] command line options:
/c
/I.
/IC:\Repo\Includes
/DWIN32
/DDEBUG
/D_DEBUG
/Zc:wchar_t-
/Zc:forScope
/Yustdafx.h

此資訊可協助您瞭解 IntelliSense 為何提供不正確的資訊。 例如,如果您的專案的 Include 目錄包含 $(MyVariable)\Include,而診斷記錄會顯示 /I\Include 為 Include 路徑,表示未評估 $(MyVariable) $(MyVariable),並且已從最終包含路徑中移除。

關於 IntelliSense 建置

Visual Studio 會使用專用C++編譯程式來建立和維護支援所有 IntelliSense 功能的資料庫。 為了讓 IntelliSense 資料庫與程式代碼保持同步,Visual Studio 會自動啟動僅限 IntelliSense 的組建作為背景工作,以響應專案設定或來源檔案中所做的特定變更。

不過,在某些情況下,Visual Studio 可能不會及時更新 IntelliSense 資料庫。 例如,當您執行 git pullgit checkout 命令時,Visual Studio 最多可能需要一小時的時間來偵測檔案中的變更。 您可以在方案總管 中,以滑鼠右鍵按兩下專案 節點,然後選擇 [重新掃描方案],以強制重新掃描方案中的所有檔案。

IntelliSense 建置失敗的疑難排解

IntelliSense 組建不會產生二進位檔,但仍會失敗。 失敗的其中一個可能原因是自定義 .props 或 .targets 檔案。 在 Visual Studio 2017 版本 15.6 及其後的版本中,僅限於 IntelliSense 的建置錯誤將被記錄在 [輸出] 視窗中。 若要查看它們,請將 顯示 輸出設定為 解決方案

[] 解決方案錯誤輸出視窗

錯誤訊息可能會指示您啟用設計時間追蹤:

error: Designtime build failed for project 'E:\src\MyProject\MyProject.vcxproj',
configuration 'Debug|x64'. IntelliSense might be unavailable.
Set environment variable TRACEDESIGNTIME=true and restart
Visual Studio to investigate.

如果您將環境變數 TRACEDESIGNTIME 設定為 true 並重新啟動 Visual Studio,您會在 %TEMP% 目錄中看到記錄檔,這可能有助於診斷組建失敗。

若要深入瞭解 TRACEDESIGNTIME 環境變數,請參閱 RoslynCommon Project System。 這些文章中的資訊與C++項目有關。