クイックスタート: C/C++ のコード分析

C または C++ コードのコード分析を定期的に実行することで、アプリケーションの品質を向上できます。 コード分析は、一般的な問題や優れたプログラミング プラクティスの違反を見つけるのに役立ちます。 また、テストによって検出するのが困難な欠陥が検出されます。 その警告は、コンパイラのエラーや警告とは異なります。問題の原因として知られている特定のコード パターンを検索します。 つまり、コードは有効ですが、自分またはコードを使用する他のユーザーに問題が発生する可能性があります。

プロジェクトの規則セットの構成

  1. ソリューション エクスプローラーで、プロジェクト名のショートカット メニューを開き、[プロパティ] を選択します。

  2. 必要に応じて、[構成] および [プラットフォーム] の一覧で、ビルド構成とターゲット プラットフォームを選択します。

  3. 選択した構成を使用してプロジェクトをビルドするたびにコード分析を実行するには、[ビルド時にコード分析を有効化] チェック ボックスをオンにします。 [分析] メニューを開き、[プロジェクト名][コード分析を実行] を選択するかまたは [ファイルでコード分析を実行] を選択して、コード分析を手動で実行することもできます。

  4. 使用する 規則セット を選択するか、カスタムの規則セット を作成します。 LLVM/clang-cl を使用する場合は、「Visual Studio での Clang-Tidy の使用」を参照して、Clang-Tidy 分析オプションを構成してください。

標準の C/C++ 規則セット

Visual Studio には、ネイティブ コードの規則として次の標準セットが含まれています。

ルール セット 説明
C++ Core Check 算術規則 これらの規則では、C++ Core Guidelines の算術演算に関連する確認が行われます。
C++ Core Check 境界規則 これらの規則では、C++ Core Guidelines の境界プロファイルが適用されます。
C++ Core Check クラス規則 これらの規則では、C++ Core Guidelines のクラスに関連する確認が行われます。
C++ Core Check 同時実行規則 これらの規則では、C++ Core Guidelines の同時実行に関連する確認が行われます。
C++ Core Check 定数規則 これらの規則では、C++ Core Guidelines の定数関連チェックが適用されます。
C++ Core Check 宣言規則 これらの規則では、C++ Core Guidelines の宣言に関連する確認が行われます。
C++ Core Check 列挙型規則 これらの規則では、C++ Core Guidelines の列挙型関連チェックが適用されます。
C++ Core Check の試験段階の規則 これらのルールでは、いくつかの試験的なチェックが収集されます。 最終的には、これらのチェックは他のルールセットに移動するか、完全に削除されます。
C++ Core Check 関数規則 これらの規則では、C++ Core Guidelines の関数に関連する確認が行われます。
C++ Core Check GSL 規則 これらの規則では、C++ Core Guidelines のガイドライン サポート ライブラリに関連する確認が行われます。
C++ Core Check 有効期限規則 これらの規則では、C++ Core Guidelines の有効期間プロファイルが適用されます。
C++ Core Check 所有者ポインター規則 これらの規則によって、C++ Core Guidelines の owner<T> に関連するリソース管理チェックが適用されます。
C++ Core Check 生ポインター規則 これらの規則では、C++ Core Guidelines の生ポインターに関連するリソース管理チェックが適用されます。
C++ Core Check 規則 これらの規則では、C++ Core Guidelines のチェックのサブセットが適用されます。 列挙型ルールセットと試験的ルールセットを除く C++ Core Check 規則をすべて含めるには、このルールセットを使用します。
C++ Core Check 共有ポインター規則 これらの規則では、C++ Core Guidelines の共有ポインター セマンティクスを持つ型に関連するリソース管理チェックが適用されます。
C++ Core Check STL 規則 これらの規則では、C++ コア ガイドラインの C++ 標準ライブラリに関連するチェックが適用されます
C++ Core Check スタイル規則 これらの規則では、C++ Core Guidelines の式およびステートメント の使用に関連するチェックが適用されます。
C++ Core Check 型規則 これらの規則では、C++ Core Guidelines の型プロファイルが適用されます。
C++ Core Check 一意ポインター規則 これらの規則では、C++ Core Guidelines の一意ポインター セマンティクスを持つ型に関連するリソース管理チェックが適用されます。
コンカレンシー チェック規則 これらの規則では、C++ で Win32 コンカレンシー パターン チェックのセットが適用されます。
コンカレンシー規則 C++ Core Guidelines から コンカレンシー チェック規則 にコンカレンシー規則を追加します。
Microsoft ネイティブ最小規則 これらの規則は、ネイティブ コードの最も重大な問題 (潜在的なセキュリティ ホールやアプリケーションのクラッシュなど) に重点を置いています。 ネイティブ プロジェクト用に作成したカスタムの規則セットにこの規則を含めることをお勧めします。
Microsoft ネイティブ推奨規則 これらの規則は、ネイティブ コードで最も重要で一般的な問題に重点を置いています。 これらの問題には、潜在的なセキュリティ ホールやアプリケーションのクラッシュが含まれます。 ネイティブ プロジェクト用に作成したカスタムの規則セットにこの規則を含めることをお勧めします。 この規則セットは、Visual Studio Professional Edition 以上で動作するように設計されています。 これには、Microsoft ネイティブ最小規則のすべての規則が含まれています。

Visual Studio には、マネージド コードのこれらの標準規則セットが含まれています。

ルール セット 説明
Microsoft 基本正確性規則 これらの規則は、フレームワーク API の使用の際の論理エラー、およびよくある失敗に関するものです。 この規則セットは、最小推奨規則で報告された警告の一覧から、さらに詳しい情報へと掘り下げる必要がある場合に使用してください。
Microsoft 基本デザイン ガイドライン規則 これらの規則は、コードをわかりやすく、また使いやすくするためのベスト プラクティスに関するものです。 この規則セットは、プロジェクトにライブラリ コードが含まれる場合や、コードをメンテナンスしやすくするためにべスト プラクティスを適用する場合に使用してください。
Microsoft 拡張正確性規則 これらの規則は、正確性に関する基本的な規則をさらに掘り下げて、論理エラーやフレームワーク使用エラーの検出範囲を最大化するためのものです。 COM 相互運用機能やモバイル アプリケーションなど、特定のシナリオに重点が置かれています。 これらのシナリオのいずれかがプロジェクトに適用される場合、またはプロジェクト内でさらに問題を見つける場合は、このルール セットを含めるかどうかを検討してください。
Microsoft 拡張デザイン ガイドライン規則 これらの規則は、基本デザイン ガイドライン規則をさらに掘り下げて、使用可能性と保守容易性に関する問題の検出範囲を最大化するためのものです。 特に、命名に関するガイドラインに重点が置かれています。 プロジェクトにライブラリ コードが含まれる場合や、コード記述の方法に最高レベルの基準を適用してメンテナンスを容易にするには、この規則セットの使用を検討してください。
Microsoft グローバリゼーション規則 これらの規則は、複数の言語、ロケール、およびカルチャが使用される環境において、データの正しい表示を妨げる問題に対処する規則です。 アプリケーションをローカライズまたはグローバル化する場合には、この規則セットを使用してください。
Microsoft マネージド最小規則 これらの規則は、コード分析が最も厳密に行われる、コードの最も重大な問題に関するものです。 これらのルールは数が少なく、限られた Visual Studio エディションでのみ実行することを目的としています。 他の Visual Studio エディションでは、MinimumRecommendedRules.ruleset を使用してください。
Microsoft マネージド推奨規則 これらの規則は、コード内の最も重要な問題に重点を置いています。 これらの問題には、潜在的なセキュリティ ホール、アプリケーションのクラッシュ、その他の重要な論理エラーおよび設計エラーが含まれます。 プロジェクト用に作成したカスタムの規則セットにこの規則を含めることをお勧めします。
Microsoft Mixed (C++ /CLR) 最小規則 これらの規則は、共通言語ランタイムをサポートする C++ プロジェクトの最も重大な問題に焦点を当てています。 これらの問題には、潜在的なセキュリティ ホール、アプリケーションのクラッシュ、その他の重要な論理エラーおよび設計エラーが含まれます。 共通言語ランタイムをサポートする C++ プロジェクト用に作成したカスタムの規則セットにこの規則セットを含めることをお勧めします。
Microsoft Mixed (C++ /CLR) 推奨規則 これらの規則は、共通言語ランタイムをサポートする C++ プロジェクトの最も一般的で重大な問題に焦点を当てています。 これらの問題には、潜在的なセキュリティ ホール、アプリケーションのクラッシュ、その他の重要な論理エラーおよび設計エラーが含まれます。 この規則セットは、Visual Studio Professional Edition 以上で使用するように設計されています。
Microsoft セキュリティ規則 この規則セットには、Microsoft のセキュリティ規則がすべて含まれます。 セキュリティ問題の検出範囲を最大化するには、この規則セットを使用してください。

すべての規則を含めるには:

ルール セット 説明
Microsoft すべての規則 この規則セットにはすべての規則が含まれます。 この規則セットを実行すると、多数の警告が報告される可能性があります。 この規則セットは、コード内のすべての問題を全体的に把握する場合に使用してください。 これは、用途を絞った各規則セットのうち、どれがプロジェクトに対して最も適切かを判断するのに役立ちます。

コード分析の実行

プロジェクト プロパティ ダイアログの [コード分析] ページでは、プロジェクトをビルドするたびにコード分析を実行するように構成できます。 また、手動でコード分析を実行することもできます。

ソリューションでコード分析を実行するには

  • [ビルド] メニューの [ソリューションでコード分析を実行] をクリックします。

プロジェクトでコード分析を実行するには

  1. ソリューション エクスプローラーで、プロジェクトの名前を選択します。

  2. [ビルド] メニューで、[プロジェクト名][コード分析を実行] を選択します。

ファイルでコード分析を実行するには:

  1. ソリューション エクスプローラーで、ファイルの名前を選択します。

  2. [ビルド] メニューで、[ファイルでコード分析を実行] を選択するか、Ctrl+Shift+Alt+F7 キーを押します。

    プロジェクトまたはソリューションがコンパイルされ、コード分析が実行されます。 結果は [エラー一覧] ウィンドウに表示されます。

コード分析の警告の分析と解決

[エラー一覧] ウィンドウに、見つかったコード分析の警告が表示されます。 結果は表に表示されます。 特定の警告に関する詳細情報がある場合、最初の列には拡張コントロールが表示されます。 問題の詳細については、これを選択して表示を展開します。 可能な場合は、コード分析に行番号と、警告の原因となった分析ロジックが表示されます。

問題の解決方法などの警告の詳細については、[コード] 列で警告 ID を選択して、対応するオンライン ヘルプ記事を表示します。

警告をダブルクリックして、Visual Studio コード エディターで警告の原因となったコード行にカーソルを移動します。 または、選択した警告で Enter キーを押します。

問題を理解した後は、コード内で解決できます。 次に、コード分析を再実行して、エラー一覧に警告が表示されないことを確認します。

コード分析の警告のための作業項目の作成

作業項目トラッキング機能を使用して、Visual Studio 内からバグをログに記録できます。 この機能を使用するには、Azure DevOps Server のインスタンス (旧称、Team Foundation Server) に接続する必要があります。

1 つ以上の C/C++ コード警告の作業項目を作成するには

  1. エラー一覧で警告展開して選択します

  2. 警告のショートカット メニューで、[作業項目の作成] を選択し、作業項目の種類を選択します。

  3. 選択された警告に対して作業項目が 1 つ作成され、IDE のドキュメント ウィンドウに作業項目が表示されます。

  4. 詳細情報を追加し、[作業項目の保存] を選択します。

コード分析結果の検索とフィルター処理

警告メッセージの長い一覧の検索と、複数のプロジェクトから成るソリューションの警告をフィルター処理できます。

  • タイトルまたは警告 ID で警告をフィルター処理するには: [検索エラー一覧] ボックスにキーワードを入力します。

  • 重大度で警告をフィルター処理するには: 既定では、コード分析のメッセージに割り当てられている重大度は 警告 です。 カスタムの規則セットを使用して、1 つ以上のメッセージの重大度を エラー に割り当てることができます。 エラー一覧重大度 列で、ドロップダウン矢印、フィルター アイコンの順に選択します。 警告 または エラー を選択すると、それぞれの重大度が割り当てられたメッセージのみが表示されます。 すべてのメッセージを表示するには、[すべてを選択] を選択します。

関連項目