Share via


用於升級 C++ 程式碼的 Visual Studio IDE 工具

Visual Studio 可協助您使用編譯器選項、程式碼分析警告和編輯器功能來升級舊版 C++ 程式碼,例如快速修正、快速諮詢和增強式捲軸。 「舊版程式碼」一詞是指下列任何類別:

  • 先前由 Microsoft C++ 編譯器 (MSVC) 允許但從未符合 C++ 標準的程式碼。

    若要升級較舊的不符合 MSVC 程式碼,請開啟 /permissive- 編譯器選項。 不符合使用方式的所有實例都會在程式碼編輯器中加上紅色波浪線。 [ 錯誤清單 ] 視窗中的錯誤訊息包含如何修正錯誤的建議。 按一下錯誤碼以移至檔中的說明頁面。 如果一次修正所有錯誤是不切實際的,您可以開啟 /permissive- 選項、修正某些錯誤,然後再次關閉選項,以階段升級不符合規範的程式碼。 程式碼會使用新的改進進行編譯,您可以稍後返回並修正其餘問題。 /permissive-如需不符合 MSVC 程式碼的範例,請參閱頁面。

  • 舊版 C++ 標準中允許但已在較新版本中已被取代或移除的程式碼。

    若要升級至較新的語言標準,請將 C++ 語言標準 選項設定為所需的標準,並修正所引發的任何編譯錯誤。 一般而言,建議將語言標準設定為 /std:c++17/std:c++20 。 升級至較新的標準時引發的錯誤與使用 /permissive- 選項時引發的錯誤無關。

  • 符合所有標準版本的程式碼,但不再被視為新式 C++ 中的最佳做法。

    若要識別建議變更的程式碼,請執行 程式碼分析

開啟並轉換舊版專案

如果您的舊版專案是以舊版 Visual Studio 為基礎,您可以在 Visual Studio 2017 或 Visual Studio 2019 中開啟它。 Visual Studio 會自動將它轉換成目前的專案架構,並支援所有最新的編譯器和 IDE 功能。

Screenshot of the Upgrade a project dialog.

如需詳細資訊,請參閱 從舊版 Visual Studio 升級 C++ 專案。

搜尋程式碼基底

升級程式碼基底通常牽涉到搜尋多個檔案。 若要搜尋程式碼基底中的任何專案,請按 Ctrl+T 以顯示 [移至所有 ] 搜尋方塊。

Screenshot of the Go to all dialog.

若要縮小搜尋範圍,請輸入其中一個 1 個字母篩選準則,後面接著空格,然後輸入您要尋找的專案。

錯誤清單

設定所需的 C++ 語言標準和其他任何編譯器選項 ( 專案 > 屬性 > 一般 )之後,請按 Ctrl+Shift+B 編譯您的專案。 您可以預期在程式碼的各個位置看到一些錯誤和警告,格式為紅色波浪線。 錯誤也會出現在 [錯誤清單 ] 中 。 如需特定錯誤的詳細資訊,請按一下錯誤碼以移至檔中的說明頁面。 以 「C」 開頭的錯誤碼是編譯器錯誤。 以 「MSB」 開頭的代碼是 MSBuild 錯誤,表示專案組態發生問題。

Screenshot showing compiler and MSBuild errors in Error List.

文件健康情況指示器

編輯器底部的檔健康情況指標會顯示目前檔中的錯誤和警告數目,並可讓您直接從一個警告/錯誤巡覽至下一個。

Document health indicator.

在許多情況下,您可以在 Visual Studio 變更歷程記錄和一致性改善檔中找到特定錯誤的詳細資訊。

使用程式碼分析將程式碼現代化

升級時,建議您在專案上執行程式碼分析,讓程式碼至少符合 Microsoft 原生建議規則。 這些規則是 Microsoft 所定義的規則組合,以及 C++ 核心指導方針 子集。 藉由符合這些,您將會大幅減少或消除常見的 Bug 來源,同時讓您的程式碼更容易閱讀,因此更容易維護。 預設會啟用使用 Microsoft 原生建議規則的程式碼分析。 您可以在 [專案 > 屬性 > 程式碼分析 ] 底下 啟用其他規則。 違反其中一項規則的程式碼會標示為警告,並在程式碼編輯器中使用綠色波浪線加上底線。 將滑鼠停留在波浪線上方,以查看 描述問題的 QuickInfo 工具提示。

Screenshot of a Code analysis tooltip.

按一下 [程式碼 ] 資料行中的 篩選圖示,選擇要顯示哪些警告。

Screenshot of Code analysis filters in Error List.

程式碼分析錯誤和警告也會出現在 [錯誤清單 ] 中 ,就像編譯器錯誤一樣。

Screenshot of Code analysis warnings in Error List.

您可以變更哪些規則為作用中,並建立自訂規則集。 如需使用程式碼分析的詳細資訊,請參閱 C/C++ 的程式碼分析概觀

使用快速動作將程式碼現代化

程式碼編輯器會提供一些常見建議的快速動作。 當燈泡圖示顯示時,您可以按一下它以查看可用的快速動作。

將宏轉換成 constexpr 函式

下圖顯示使用名為 AVERAGE 的宏,其具有預設語意色彩標示。 此影像也會顯示滑鼠游標停留在它的上方時顯示的 QuickInfo 工具提示:

Screenshot of a QuickInfo macro expansion.

因為新式 C++ 不建議使用宏,所以 Visual Studio 可讓您輕鬆地將宏轉換成函 constexpr 式:

  1. 以滑鼠右鍵按一下 AVERAGE 並選擇 [移至定義 ]。

  2. 按一下螺絲起子圖示,然後選擇 [將宏轉換成 constexpr]

    Screenshot of a Quick Action macro to constexpr.

宏會轉換,如下所示:

Screenshot of a constexpr function.

的呼叫 AVERAGE 現在會標示為函式呼叫,而 [快速諮詢] 工具提示會顯示函式的推斷類型:

Screenshot of a constexpr function call.

初始化變數

未初始化的變數可以保存導致嚴重 Bug 的隨機值。 程式碼分析會標幟這些實例,而編輯器會提供快速動作:

Screenshot of the pop-up for an uninitialized variable.

轉換為原始字串常值

原始字串常值比具有內嵌逸出字元的字串更容易輸入,而且更容易輸入。 以滑鼠右鍵按一下字串,然後選擇 [快速動作 ] 將它轉換成原始字串常值。

Raw string literal.

字串會轉換成: R"(C:\Users\bjarnes\demo\output.txt)"