Visual Studio で C/C++ のインクルード クリーンアップをを構成する

17.8 Preview 1 以降、Visual Studio では、C および C++ のコードの品質を向上させるために、次の方法で #include をクリーンアップできます。

  • 必要なヘッダー ファイルが別のヘッダー ファイルによって間接的に含まれている理由でのみコンパイルされるコードのヘッダー ファイルを追加するオファー。
  • 未使用のヘッダー ファイルを削除するオファー。ビルド時間が短縮します。

この記事では、Visual Studio でインクルード クリーンアップを構成する方法について説明します。 インクルード クリーンアップの詳細については、C/C++ インクルード クリーンアップの概要に関する記事を参照してください。

インクルード クリーンアップをオンにする

インクルード クリーンアップの機能は既定でオンになっています。 アクティブになっていない場合は、[ツール]>[オプション]>[テキスト エディター]>[C/C++]>[コード クリーンアップ] からオンにし、[#include クリーンアップを有効にする] を選択します。

次に、ドロップダウンを使用して、間接ヘッダーの追加や、未使用のヘッダーの削除が可能な場合の通知方法を構成します。

The Tools options dialog opened at Text Editor > C/C++ > Code Cleanup.

[#include クリーンアップを有効にする] チェック ボックスがオンになっています。 [未使用のインクルード候補レベルの削除] と [不足しているインクルード候補レベルの追加] のドロップダウンが表示されています。 ドロップダウンの内容 (**リファクタリングのみ**、**候補**、**警告**、**エラー**) が表示されています。 **未使用のインクルード候補レベルの削除** ドロップダウンでも同じオプションが表示されますが、淡色表示されているものもあります。

候補レベルのオプションの意味は次のとおりです。

リファクタリングのみ: インクルード クリーンアップにより、マウス ポインターを #include の上に置くか、#include 行にカーソルを置いて Ctrl キーを押しながらピリオド キーを押したときに、クイック アクション メニューで実行できるアクションが提供されます。

A screenshot of the quick action to remove an unused header

#include iostream の上にカーソルを置くと、このファイルで #include iostream が使用されていないテキストに電球が表示されます。

候補、警告、エラー: インクルード クリーンアップにより、[エラー一覧] ウィンドウで候補、警告、またはエラーのときに実行できるアクションが提供されます。 いずれかを決定します。 次のスクリーンショットの [エラー一覧] では、未使用のヘッダーに警告が表示されるようにインクルード クリーンアップが構成されています。 インクルード クリーンアップによる出力が表示されるように、ドロップダウン フィルターで [ビルド + Intellisense] が選択されていることを確認します。

A screenshot of the Error List window.

ドロップダウン フィルターが [ビルド + IntelliSense] に設定されています。 "VCIC002 - #include < iostream >はこのファイルでは使用されません" という警告が表示されています。

淡色表示

インクルード クリーンアップでは、コード エディターで未使用のヘッダー ファイルの行を淡色表示することで、未使用のヘッダーを示します。 淡色表示の#include の上にカーソルを置くと、クイック アクション メニューが表示されるので、[考えられる修正内容の表示] を選択するか、電球のドロップダウンをクリックします。これで、未使用のファイルに関連するアクションが表示されます。

A screenshot of a dimmed #include < iostream > line.

iostream を使用するコード行がコメント アウトされているため、#include < iostream > の行が淡色表示されています。そのコード行は // std::cout << "charSize = " << charSize; です。この行にクイック アクション メニューも表示されます。 #include < iostream > がこのファイルで使用されていないことが示され、[考えられる修正内容の表示] へのリンクが含まれています。

.editorconfig を使用してインクルード クリーンアップを構成する

インクルード クリーンアップを構成する場合、指定したインクルードをクリーンアップの候補から除外する、ヘッダー ファイルがツールで未使用としてマークされないようにそれらを必要であることを示す、などのオプションもあります。 これらのオプションは .editorconfig ファイルで定義されており、特にすべてのユーザーにコードベースで動作する一貫したコーディング スタイルを適用するためにプロジェクトに追加できます。 プロジェクトに .editorconfig ファイルを追加する方法の詳細については、「EditorConfig を使用して移植可能なカスタム エディター設定を作成する」を参照してください。

インクルード クリーンアップで使用できる .editorconfig の設定は次のとおりです。

設定
cpp_include_cleanup_add_missing_error_tag_type

推移的なインクルード メッセージの追加のエラー レベルを設定します。
none
suggestion
warning
error
cpp_include_cleanup_add_missing_error_tag_type = suggestion
cpp_include_cleanup_remove_unused_error_tag_type

使用されていないインクルード メッセージの削除のエラー レベルを設定します。
none
suggestion
warning
error
dimmed
cpp_include_cleanup_remove_unused_error_tag_type = dimmed
cpp_include_cleanup_excluded_files

指定したファイルをインクルード クリーンアップ メッセージから除外します。 ヘッダーに関連する候補は、ヘッダーを追加するかどうか、または未使用であるかどうかに関係なく、まったく表示されません。
filename cpp_include_cleanup_excluded_files = vcruntime.h, vcruntime_string.h
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_include_cleanup_replacement_files

インクルード クリーンアップ処理中に file1file2 に置き換えます。 たとえば、stdio.h よりも cstdio を使いたい場合があるかもしれません。 #include <cstudio>#include <stdio.h> の両方を含むファイルがあり、この設定で stdio.h のコンテンツのみを使用する場合は、処理中に cstdio の使用が stdio.h に置き換えられたため、インクルード クリーンアップによって stdio.h を削除するように指示されます。 どちらのコンテンツも使用しない場合は、インクルード クリーンアップのときに両方を削除するように指示されます。
file1:file2 cpp_include_cleanup_replacement_files = stdio.h:cstdio,stdint.h:cstdint
cpp_include_cleanup_alternate_files

file1 が含まれている場合は、間接インクルード file2 のメッセージを生成しないでください。 たとえば、#include <windows.h> を実行し、その間接的にインクルードされたヘッダー winerror.h にあるものしか使用していない場合、インクルード クリーンアップで winerror.h の追加を求めるダイアログを表示することはありません。 含まれる間接インクルードの代わりにファサード ヘッダー ファイルを含めたい場合に便利です。
file1:file2 cpp_include_cleanup_alternate_files = windows.h:winerror.h, windows.h:minwindef.h

関連項目

C/C++ インクルード クリーンアップの概要
インクルード クリーンアップのメッセージ