現已釋出!閱讀關於 11 月新增功能和修復的內容。

編輯和導航 C++ 程式碼

本文概述了 C/C++ 擴充套件特有的程式碼編輯和導航功能。有關 Visual Studio Code 中通用編輯和導航的更多資訊,請參閱 基本編輯程式碼導航

編輯 C++ 程式碼

C/C++ 擴充套件提供的原始碼編輯功能是編輯、格式化和理解程式碼庫的強大工具。

標識標頭檔案

為了提供最佳的編輯體驗,C++ 擴充套件需要知道在哪裡可以找到程式碼中引用的每個標頭檔案。預設情況下,該擴充套件會搜尋當前源目錄、其子目錄以及一些特定於平臺的目錄。如果找不到引用的標頭檔案,會在 #include 指令下方顯示紅色波浪線。

指定其他包含目錄,

  1. 選擇一個沒有引用的 #include 路徑。
  2. 選擇出現的燈泡,然後選擇編輯 "includePath" 設定,這將開啟 C/C++ 擴充套件的設定編輯器。
  3. 包含路徑部分下,您可以指定任何附加包含目錄的路徑。

Process of adding a new header to the include path

列出成員

鍵入成員訪問符號(.->)時,編輯器會顯示成員列表。隨著您鍵入更多字母,列表會即時過濾。

List members

程式碼格式化

Visual Studio Code 的 C/C++ 擴充套件支援使用 clang-format 和 vc_format 進行原始碼格式化。這兩種格式化選項都包含在擴充套件中,其中 clang-format 是預設選項。

您可以使用格式化文件⇧⌥F(Windows Shift+Alt+F,Linux Ctrl+Shift+I)格式化整個檔案,或使用右鍵單擊上下文選單中的格式化選定內容⌘K ⌘F(Windows、Linux Ctrl+K Ctrl+F)僅格式化當前選定內容。您還可以透過鍵入、儲存和貼上等使用者手勢觸發格式化,具體取決於以下 設定

  • editor.formatOnSave - 儲存檔案時格式化。
  • editor.formatOnType - 鍵入時格式化(透過 ; 字元觸發)。

有關格式化的更多資訊,請參閱 格式化

Clang-format

預設情況下,clang-format 樣式設定為 file。這意味著,如果您的工作區中找到了 .clang-format 檔案,則該檔案中指定的設定將用作格式化參考。否則,格式化將基於 C_Cpp.clang_format_fallbackStyle 設定 中指定的預設樣式。

目前,預設格式化樣式為 Visual Studio,這是 Visual Studio 中預設程式碼格式化程式的近似值。它包含以下設定:

UseTab: (VS Code current setting)
IndentWidth: (VS Code current setting)
BreakBeforeBraces: Allman
AllowShortIfStatementsOnASingleLine: false
IndentCaseLabels: false
ColumnLimit: 0

要使用與擴充套件附帶的版本不同的 clang-format 版本,請將 C_Cpp.clang_format_path 設定更改為 clang-format 二進位制檔案安裝的路徑。

例如,在 Windows 平臺上,使用

  "C_Cpp.clang_format_path": "C:\\Program Files (x86)\\LLVM\\bin\\clang-format.exe"

vc_format

預設情況下,如果靠近正在格式化的程式碼的位置找到了具有相關設定的 .editorconfig 檔案,則會使用 Visual C++ 格式化引擎而不是 clang-format。否則,請導航到 C_Cpp.formatting 設定並將其設定為 vc_format 以使用 Visual C++ 格式化引擎。

增強的語義著色

啟用 IntelliSense 後,Visual Studio Code C/C++ 擴充套件支援語義著色。有關設定類、函式、變數等的顏色的更多資訊,請參閱 增強著色。有關配置 IntelliSense 的更多資訊,請參閱 IntelliSense 配置

快速資訊

您可以將滑鼠懸停在符號上以檢視其定義的內聯檢視。

Quick info

Doxygen 註釋

Doxygen 是一個從原始碼生成文件的工具。當您使用註釋註解程式碼時,Doxygen 會為這些函式生成文件。對於 doxygen 註釋,鍵入 /** 並按 Enter 鍵以生成 doxygen 註釋塊。支援的 doxygen 標籤包括:@brief@tparam@param@return@exception@deprecated@note@attention@pre

Markdown 註釋

預設情況下,C++ 擴充套件支援在編輯器中顯示 Markdown 的子集。此子集支援除 _* 符號以外的所有 Markdown 註釋。切換新的註釋中的 Markdown 設定以啟用所有 Markdown,保留此 Markdown 子集,或停用 Markdown 支援。

導航原始碼

原始碼導航功能可以幫助您更好地理解程式碼庫。這些功能可讓您快速搜尋程式碼中的符號,導航到它們的定義,或查詢它們的引用。

導航由儲存在本地符號資訊資料庫中的一組標記提供支援。每當開啟包含 C++ 原始檔名的資料夾時,C/C++ 擴充套件就會建立該檔案中文字定義的符號資料庫。當檔案更改時,該資料庫會更新。如果文件在未儲存的情況下關閉,則資料庫會更新到上次儲存的狀態。

搜尋符號

您可以搜尋當前檔案或工作區中的符號,以便更快地導航程式碼。

要在當前檔案中搜索符號,請按 ⇧⌘O(Windows、Linux Ctrl+Shift+O,然後輸入您要查詢的符號名稱。將顯示潛在匹配項列表,該列表會在您鍵入時進行過濾。從匹配項列表中選擇以導航到該符號的位置。

Searching the current file

要在當前工作區中搜索符號,請按 ⌘T(Windows、Linux Ctrl+T,然後輸入符號名稱。將顯示潛在匹配項列表。如果您選擇的匹配項位於尚未開啟的檔案中,則會在導航到匹配項位置之前開啟該檔案。

Searching in your workspace

您還可以透過命令面板⇧⌘P(Windows、Linux Ctrl+Shift+P)訪問這些命令來搜尋符號。使用快速開啟⌘P(Windows、Linux Ctrl+P),然後輸入 @ 命令搜尋當前檔案,或輸入 # 命令搜尋當前工作區。 ⇧⌘O(Windows、Linux Ctrl+Shift+O⌘T(Windows、Linux Ctrl+T@# 命令的快捷方式。

呼叫層次結構

呼叫層次結構檢視顯示對函式的所有呼叫或來自函式的所有呼叫。它使您能夠理解原始碼中函式之間複雜的呼叫關係。

要檢視呼叫層次結構,請選擇一個函式,右鍵單擊以顯示上下文選單,然後選擇顯示呼叫層次結構。您也可以使用鍵盤快捷鍵(Windows 上為 Shift+Alt+H),或呼叫命令面板⇧⌘P(Windows、Linux Ctrl+Shift+P)並執行命令呼叫:顯示呼叫層次結構。這會將呼叫樹填充到邊欄中,其中包含所選函式呼叫的所有函式。

Selecting call hierarchy and showing calls in sidebar

切換邊欄選單中的電話圖示以切換到傳入呼叫。傳入呼叫顯示了何時您的函式被另一個函式引用。您還可以透過選擇呼叫樹中已顯示的函式並在該函式上右鍵單擊以檢視可用命令來探索巢狀呼叫。

Nested Calls for Call Hierarchy

速覽

Peek 功能在Peek 視窗中顯示幾行程式碼,這樣您就不必離開當前位置。它有助於快速理解符號的上下文,而無需離開當前程式碼。

要開啟Peek 視窗,請透過右鍵單擊導航到上下文選單,然後選擇Peek。在那裡,您可以選擇 Peek 符號的定義、宣告、型別定義或引用。

Peek definition

開啟 Peek 視窗後,您可以瀏覽顯示的匹配項列表以找到您感興趣的專案。如果您想導航到其中一個匹配項的位置,請選擇該匹配項或雙擊 Peek 視窗左側顯示的原始碼。

轉到定義

使用轉到定義功能可快速導航到原始碼中定義符號的位置。在原始碼中選擇一個符號,然後按 F12,或右鍵單擊並從上下文選單中選擇轉到定義。當符號只有一個定義時,您將被直接導航到其位置,否則將會在 Peek 視窗中顯示競爭的定義,如上一節所述。

如果找不到所選符號的定義,C/C++ 擴充套件會自動搜尋該符號的宣告。

轉到宣告

使用轉到宣告功能可導航到原始碼中宣告符號的位置。此功能與轉到定義相同,但用於宣告。在原始碼中選擇一個符號,右鍵單擊,然後從上下文選單中選擇轉到宣告。這將導航到符號宣告的位置。

轉到引用

使用轉到引用功能可瞭解符號在原始碼中被引用了多少次以及在何處被引用。在原始碼中選擇一個符號,然後按 ⇧F12(Windows、Linux Shift+F12,或右鍵單擊並從上下文選單中選擇轉到引用。如果找到任何引用,它們將顯示在 Peek 視窗中。

轉到型別定義

使用轉到型別定義功能可跳轉到原始碼中定義型別的位置。在原始碼中選擇一個型別,右鍵單擊以開啟上下文選單,然後選擇轉到型別定義

後續步驟

繼續閱讀以瞭解:

如果您有其他任何問題或遇到任何問題,請在 GitHub 上提交 issue。您可能會被要求提供擴充套件的日誌資訊以幫助診斷問題。有關提供擴充套件日誌的幫助,請參閱 C/C++ 擴充套件日誌記錄

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