C++ コードをアップグレードするための Visual Studio IDE ツール
Visual Studio は、コンパイラ オプション、コード分析の警告、エディターの機能 (クイック修正、クイックヒント、強化されたスクロール バーなど) によって、レガシ C++ コードのアップグレードを支援します。 "レガシ コード" という用語は、次のいずれかのカテゴリを指します。
Microsoft C++ コンパイラ (MSVC) で以前は許可されていたが、C++ 標準に準拠していないコード。
古い非準拠の MSVC コードをアップグレードするには、
/permissive-
コンパイラ オプションを有効にします。 コード エディターでは、使用されている非準拠コードのすべてのインスタンスに赤の波線の下線が付けられます。 [エラー一覧] ウィンドウのエラー メッセージには、エラーの修正方法に関する推奨事項が含まれています。 エラー コードをクリックして、ドキュメントのヘルプ ページに移動します。 一度にすべてのエラーを修正するのが無理な場合は、/permissive-
オプションを有効にし、一部のエラーを修正してから、このオプションを再度無効にすることで、非準拠コードを段階的にアップグレードできます。 コードは新しく改善された状態でコンパイルされるので、後で戻って残りの問題を修正できます。 非準拠の MSVC コードの例については、/permissive-
に関するページを参照してください。以前のバージョンの C++ 標準では許可されていたが、新しいバージョンでは非推奨になったか削除されたコード。
新しい言語標準にアップグレードするには、[C++ 言語標準] オプションを目的の標準に設定し、発生したコンパイル エラーを修正します。 一般に、言語標準を
/std:c++17
または/std:c++20
に設定することをお勧めします。 新しい標準にアップグレードしたときに発生するエラーは、/permissive-
オプションの使用時に発生するエラーとは無関係です。標準のすべてのバージョンに準拠しているが、最新の C++ ではベスト プラクティスと見なされなくなったコード。
変更が推奨されるコードを特定するには、コード分析を実行します。
レガシ プロジェクトを開いて変換する
レガシ プロジェクトが古いバージョンの Visual Studio に基づいている場合は、Visual Studio 2017 または Visual Studio 2019 で開くことができます。 Visual Studio により、コンパイラと IDE の最新の機能をすべてサポートする最新のプロジェクト スキーマに自動的に変換されます。
詳細については、「以前のバージョンの Visual Studio からの C++ プロジェクトのアップグレード」を参照してください。
コード ベースの検索
多くの場合、コード ベースのアップグレードでは、複数のファイルを検索する必要があります。 コード ベースで何かを検索するには、Ctrl + T キーを押して、[すべてに移動] 検索ボックスを表示します。
検索範囲を絞り込むには、1 文字のフィルターのいずれかを入力し、その後にスペースを入力して、検索対象を入力します。
エラー一覧
目的の C++ 言語標準とその他のコンパイラ オプション ([プロジェクト]>[プロパティ]>[全般]) を設定したら、Ctrl + Shift + B キーを押してプロジェクトをコンパイルします。 コード内のさまざまな場所に、赤の波線の形でエラーと警告が表示されることが予想されます。 エラーは、エラー一覧にも表示されます。 特定のエラーの詳細については、エラー コードをクリックして、ドキュメントのヘルプ ページに移動します。 "C" で始まるエラー コードはコンパイラ エラーです。 "MSB" で始まるコードは、プロジェクト構成に問題があることを示す MSBuild エラーです。
ドキュメントの正常性インジケーター
エディターの下部にあるドキュメントの正常性インジケーターには、現在のドキュメントのエラーと警告の数が表示され、次の警告またはエラーに直接移動できます。
多くの場合、Visual Studio の変更履歴と準拠の強化に関するドキュメントで、特定のエラーに関する詳細情報を確認できます。
コード分析を使用したコードの最新化
アップグレードするときは、コードが少なくとも Microsoft ネイティブ推奨規則に準拠するように、プロジェクトでコード分析を実行することをお勧めします。 これらの規則は、Microsoft が定義した規則と C++ Core Guidelines のサブセットを組み合わせたものです。 これらに準拠することで、バグの一般的な原因を大幅に削減または排除すると同時に、コードを読みやすくすることができるため、管理しやすくなります。 Microsoft ネイティブ推奨規則を使用する Code Analysis は、既定で有効になっています。 [プロジェクト]>[プロパティ]>[Code Analysis] で、追加の規則を有効にすることができます。 規則のいずれかに違反しているコードには、警告のフラグが設定され、コード エディターで緑の波線の下線が付けられます。 波線をポイントすると、その問題を説明するクイック ツールヒントが表示されます。
[コード] 列のフィルター アイコンをクリックして、表示する警告を選択します。
コンパイラ エラーと同様に、コード分析のエラーと警告は、エラー一覧にも表示されます。
アクティブな規則を変更し、カスタム ルールセットを作成できます。 Code Analysis の使用方法の詳細については、「C/C++ のコード分析の概要」を参照してください。
クイック アクションを使用したコードの最新化
コード エディターには、いくつかの一般的な推奨事項のクイック アクションが用意されています。 電球アイコンが表示されたら、それをクリックして、使用可能なクイック アクションを表示できます。
constexpr 関数へのマクロの変換
次の画像は、既定のセマンティクスの色づけが設定された AVERAGE
というマクロの使用方法を示しています。 この画像には、マウス カーソルを合わせたときに表示されるクイック ツールヒントも示されています。
最新の C++ ではマクロの使用が推奨されていないため、Visual Studio ではマクロを constexpr
関数に簡単に変換できます。
AVERAGE
を右クリックし、[定義へ移動] を選択します。ドライバー アイコンをクリックし、[マクロを constexpr に変換する] を選択します。
マクロが次のように変換されます。
また、AVERAGE
の呼び出しが関数呼び出しとして色づけされており、クイック ツールヒントに関数の推測された型が示されています。
変数の初期化
初期化されていない変数には、重大なバグにつながるランダムな値が保持される可能性があります。 コード分析により、これらのインスタンスにフラグが設定され、エディターにクイック アクションが示されます。
生文字列に変換
生文字列リテラルは、エスケープ文字が埋め込まれた文字列よりもエラーが発生しにくく、入力の利便性が高まります。 文字列を右クリックし、生文字列リテラルに変換するクイック アクションを選択します。
文字列が R"(C:\Users\bjarnes\demo\output.txt)"
に変換されます。