從 17.8 預覽版 1 開始,Visual Studio 可以透過以下方式清理你的#include檔案,以提升 C 和 C++ 程式碼的品質:
- 針對那些之所以能編譯、只是因為另一個標頭檔間接包含了所需標頭檔的程式碼,提供加入標頭檔的建議。
- 提供移除未使用標頭檔的功能,藉此縮短建置時間。
本文說明如何在Visual Studio中設定Include Cleanup。 如需 Include Cleanup 的詳細資訊,請參閱 C/C++ Include Cleanup 概觀。
開啟 [包含清除]
「Include Cleanup」功能預設為關閉。
請依序選取 工具>選項>文字編輯器>C/C++>程式碼清理,然後選取 啟用 #include 清理 以開啟此功能。
接著使用下拉選單來設定關於增加間接標頭或移除未使用標頭的機會通知的嚴重程度:
已勾選**啟用 #include 清理**的勾選框。 會顯示 **移除未使用的 include 建議等級** 和 **新增遺漏的 include 建議等級** 的下拉式選單。 下拉式清單的內容會顯示,也就是:**重構僅限**、**建議**、**警告**和**錯誤**。 **移除未使用的包含建議等級**下拉選單提供相同選項,但同時新增了**調光**。
以下選項可控制「包含清理」功能提供的有關未使用標頭的通知類型:
變暗
包含清理會藉由在程式碼編輯器中將未使用標頭檔所在的行調暗,並在 錯誤清單 視窗中顯示訊息,來顯示未使用的標頭檔。 在程式碼編輯器中,將游標停留在變暗的 #include 上方,以叫出快速動作選單,然後選擇 顯示可能的修正;或者按一下燈泡下拉式選單,以查看與未使用檔案相關的動作。
`#include < iostream >` 這一行會變暗,因為使用 iostream 的那行程式碼被註解掉了。那行程式碼是 `// std::cout << "charSize = " << charSize;`。此行也會顯示快速動作選單。 它表示 #include < iostream >不會用於此檔案,而且有顯示潛在修正的連結。
僅重構:當您將滑鼠指標停留在 #include 上方,或將游標放在 #include 行並按下 Ctrl+句號時,[包含清理] 會在程式碼編輯器的快速動作功能表中提供可執行的動作:
當游標停留在 #include iostream 上時,會出現一個燈泡,顯示「#include iostream 未在此檔案中使用」的文字。
建議、警告、錯誤:Include 清理可在 錯誤清單 視窗中,將 Include 清理訊息顯示為建議、警告或錯誤。 您可以判斷哪一個。 在下列 錯誤清單 的螢幕擷取畫面中,Include Cleanup 已設定為以警告顯示未使用的標頭檔。 確認已在下拉式篩選器中選取 Build + IntelliSense,以便您查看 Include Cleanup 輸出:
下拉篩選器設為 **Build + IntelliSense**。 有警告顯示:VCIC002 - 「#include
選取 工具>選項>所有設定>語言>C/C++>程式碼清理>包含清理即可啟用。 使用下拉式選單設定您希望如何收到通知,以提示您標示未使用的 #include 陳述式、可最佳化的 #include 陳述式(在直接加入其所需的傳遞相依 include 後即可移除),以及透過傳遞相依而被包含但缺少的 #include 陳述式。
截圖顯示下拉式選單,用來選擇如何在程式碼編輯器中醒目提示未使用的標頭、可最佳化的標頭,以及經傳遞方式包含的標頭。
選項的意義:
變暗
Include Cleanup 會在程式碼編輯器中將未使用的標頭檔案的行調暗,並在 錯誤清單 視窗中以訊息顯示未使用的標頭。 在程式碼編輯器中,將游標懸停在變暗的 #include 上,以叫出快速動作選單,然後選擇 顯示可能的修正方式;或者點擊燈泡下拉式選單,以查看與未使用檔案相關的動作。
「#include
無:不採取行動。 Include Cleanup 仍會在程式碼編輯器中的快速動作選單提供可執行的動作;當你將滑鼠指標停留在 #include 上方,或將游標放在 #include 那一行並按下 Ctrl+句號時,即可使用這些動作:
建議、警告、錯誤:Include Cleanup 可在 [錯誤清單] 視窗中,將 Include Cleanup 訊息顯示為建議、警告或錯誤。 您可以判斷哪一個。 在下列 錯誤清單 的螢幕擷取畫面中,Include Cleanup 已設定為以警告顯示未使用的標頭檔。 確認已在下拉式篩選器中選取 Build + IntelliSense,以便您查看 Include Cleanup 輸出:
下拉篩選器設為 **Build + IntelliSense**。 有警告顯示:VCIC002 - 「#include
其他組態選項
更多包含清理設定可在工具>選項>、文字編輯器>、C/C++>程式碼清理中取得:
-
排序內容包括:標記
#include需要排序的指令。 選擇錯誤 清單 視窗中出現的訊息的嚴重度通知等級: 無 (功能關閉)、 建議、 警告或 錯誤。 -
樣式:控制語句的
#include排序方式。 選擇 忽略 可在排序時不考慮括號樣式;選擇 引號 可將使用引號的 include 排在使用角括號的 include 之前,或選擇 角括號 可將使用角括號的 include 排在使用引號的 include 之前。 - 區分大小寫:選取時,排序比較會區分檔案名稱中的大小寫。 清除後,排序不區分大小寫。
更多Include 清理設定可在工具>選項>所有設定>語言>C/C++>程式碼清理>Include 清理底下取得:
- 進階篩選:當你選擇時,如果你呼叫衍生類別物件上的成員函式,但該函式是在基底類別中定義的,工具不會建議新增基底類別標頭。 啟用此選項,以減少當您使用的符號來自基底類別而非您直接參考的型別時所產生的雜訊建議。
- 在對 Include Cleanup 進行任何編輯後排序 #include 指示詞:選取後,內建的 include 排序功能會在任何 Include Cleanup 動作之後執行。
- 在為了清理 include 而進行任何編輯後,格式化 #include 指示詞:選取此選項時,格式化命令會在任何 include 清理動作後執行。
使用 .editorconfig 設定 Include Cleanup
「Include Cleanup」功能提供更多選項,例如可將指定的 include 排除在清理建議之外,並標示某些標頭檔為必要,以免工具將其標記為未使用。 在檔案 .editorconfig 中定義這些選項。 將此檔案加入你的專案,以強制所有在程式碼庫中工作者保持一致的程式碼風格。 如需有關將 .editorconfig 檔案新增至專案的詳細資訊,請參閱 使用 EditorConfig 建立可攜式自訂編輯器設定。
.editorconfig您可以搭配 Include Cleanup 使用的設定如下:
| 設定 | 值 | 範例 |
|---|---|---|
cpp_include_cleanup_add_missing_error_tag_type
設定新增傳遞包含訊息的錯誤等級。 |
nonesuggestionwarningerror |
cpp_include_cleanup_add_missing_error_tag_type = suggestion |
cpp_include_cleanup_alternate_files
對於間接包含的訊息請屏蔽。 例如,如果你 #include <windows.h>,且只使用其間接包含的標頭winerror.h或minwindef.h中的內容,工具就不會建議加入這些標頭。 |
檔案1:檔案2[:檔案3...][,檔案4:檔案5......] |
cpp_include_cleanup_alternate_files = windows.h:winerror.h:minwindef.h
或 cpp_include_cleanup_alternate_files = windows.h:winerror.h:minwindef.h,umbrella.h:internal.h |
cpp_include_cleanup_excluded_files
從 Include Cleanup 訊息中排除指定的檔案。 您完全不會收到任何與標題相關的建議,無論是有關新增它還是它未被使用。 |
filename | cpp_include_cleanup_excluded_files = vcruntime.h, vcruntime_string.h |
cpp_include_cleanup_remove_unused_error_tag_type
設定移除未使用的包含訊息的錯誤等級。 |
nonesuggestionwarningerrordimmed |
cpp_include_cleanup_remove_unused_error_tag_type = dimmed |
cpp_include_cleanup_replacement_files
在 Include Cleanup 處理期間,將 file1 取代為 file2 。 例如,您可能偏好使用 cstdio 而不是 stdio.h。 如果您有一個同時含有 #include <cstdio> 和 #include <stdio.h> 的檔案,而且您只使用來自 stdio.h 的內容,則此 Include Cleanup 設定會告訴您移除 stdio.h,因為它在處理期間以 stdio.h 取代了 cstdio 的用法。 如果您沒有使用其中一項的內容,則 Include Cleanup 會告訴您要移除這兩者。 |
file1:file2 | cpp_include_cleanup_replacement_files = stdio.h:cstdio,stdint.h:cstdint |
cpp_include_cleanup_required_files
註明 file1 的使用需要 file2。 例如,指定如果您使用 atlwin.h,則也必須包含 altbase.h。 |
file1:file2 | cpp_include_cleanup_required_files = atlwin.h:altbase.h, atlcom.h:altbase.h |
cpp_sort_includes_error_tag_type
設定 sort-includes 訊息的錯誤等級。 none 關閉這個功能。
suggestion 顯示一個 ... 波浪線,並將訊息加入錯誤清單。
warning 會顯示綠色波浪線並顯示警告。
error 會顯示紅色波浪底線,並標示錯誤。 |
nonesuggestionwarningerror |
cpp_sort_includes_error_tag_type = suggestion |
cpp_sort_includes_priority_case_sensitive
當 true 時,排序比較會區分檔案名稱的大小寫。 當 false時,排序不區分大小寫。 |
truefalse |
cpp_sort_includes_priority_case_sensitive = false |
cpp_sort_includes_priority_style
控制排序是否會考慮括號樣式。 ignore 排序時不考慮括號。
quoted 所引用的排序包括上述括號內的範圍。
angle_brackets 會將尖括號 include 排在引號 include 之前。 |
ignorequotedangle_brackets |
cpp_sort_includes_priority_style = quoted |
以下設定從 Visual Studio 2026 開始可用:
| 設定 | 值 | 範例 |
|---|---|---|
cpp_include_cleanup_format_after_edits
當 true時,在任何 Include Cleanup 動作後執行 format 指令。 當你設定了 clang-format 來排序 #include 指令時,這很有用。 |
truefalse |
cpp_include_cleanup_format_after_edits = true |
cpp_include_cleanup_sort_after_edits
當 true時,會在執行任何 Include 清理動作後,執行內建的 sort-includes 功能。 當你不使用 clang-format 來排序 #include 指令時,這很有用。 |
truefalse |
cpp_include_cleanup_sort_after_edits = true |
透過程式碼抑制未使用的包含訊息
從 Visual Studio 2026 開始,你可以在同一行加入 // VCIC-Excluded 註解,來隱藏針對單一 #include 指示詞的 Include Cleanup 訊息。 Include Cleanup 工具不會建議移除該 include,即使它看起來未被使用。 在標記後提供可選的對齊文字,讓未來讀者知道包含的意義:
#include "Header2.h" // VCIC-Excluded: needed for the ATL macros used below
你也可以使用燈泡選單,將 // VCIC-Excluded 註解加入 #include 指示詞。 確保透過 工具>選項>所有設定>語言>C/C++>程式碼清理>Include 清理 開啟 Include 清理,因為此功能預設為關閉。 然後,將游標移到 #include 這一行,選取 其他修正>在原始碼中抑制 VCIC002::
該 // VCIC-Excluded 註解只適用於 #include 該檔案。 在 .editorconfig 中設定 cpp_include_cleanup_excluded_files,會將該排除規則套用至每個受 .editorconfig 控管的檔案。