Visual Studio で C/C++ のインクルード クリーンアップをを構成する
17.8 Preview 1 以降、Visual Studio では、C および C++ のコードの品質を向上させるために、次の方法で #include
をクリーンアップできます。
- 必要なヘッダー ファイルが別のヘッダー ファイルによって間接的にインクルードされるためにのみ、コンパイルされるコードにヘッダー ファイルを追加することを提案します。
- 未使用のヘッダー ファイルを削除するオファー。ビルド時間が短縮します。
この記事では、Visual Studio でインクルード クリーンアップを構成する方法について説明します。 インクルード クリーンアップの詳細については、C/C++ インクルード クリーンアップの概要に関する記事を参照してください。
インクルード クリーンアップをオンにする
インクルード クリーンアップの機能は既定でオンになっています。 アクティブになっていない場合は、[ツール]>[オプション]>[テキスト エディター]>[C/C++]>[コード クリーンアップ] からオンにし、[#include クリーンアップを有効にする] を選択します。
次に、ドロップダウンを使用して、間接ヘッダーの追加や、未使用のヘッダーの削除が可能な場合の通知方法を構成します。
[#include クリーンアップを有効にする] チェック ボックスがオンになっています。 [未使用のインクルード候補レベルの削除] と [不足しているインクルード候補レベルの追加] のドロップダウンが表示されています。 ドロップダウンの内容 (**リファクタリングのみ**、**候補**、**警告**、**エラー**) が表示されています。 **未使用のインクルード候補レベルの削除** ドロップダウンでも同じオプションが表示されますが、淡色表示されているものもあります。
候補レベルのオプションの意味は次のとおりです。
リファクタリングのみ: インクルード クリーンアップにより、マウス ポインターを #include
の上に置くか、#include
行にカーソルを置いて Ctrl キーを押しながらピリオド キーを押したときに、クイック アクション メニューで実行できるアクションが提供されます。
#include iostream の上にカーソルを置くと、このファイルで #include iostream が使用されていないテキストに電球が表示されます。
候補、警告、エラー: インクルード クリーンアップにより、[エラー一覧] ウィンドウで候補、警告、またはエラーのときに実行できるアクションが提供されます。 いずれかを決定します。 次のスクリーンショットの [エラー一覧] では、未使用のヘッダーに警告が表示されるようにインクルード クリーンアップが構成されています。 インクルード クリーンアップによる出力が表示されるように、ドロップダウン フィルターで [ビルド + Intellisense] が選択されていることを確認します。
ドロップダウン フィルターは [Build + IntelliSense] (ビルド + IntelliSense) に設定されています。 "VCIC002 - #include < iostream >はこのファイルでは使用されません" という警告が表示されています。
淡色表示
インクルード クリーンアップでは、コード エディターで未使用のヘッダー ファイルの行を淡色表示することで、未使用のヘッダーを示します。 淡色表示の#include
の上にカーソルを置くと、クイック アクション メニューが表示されるので、[考えられる修正内容の表示] を選択するか、電球のドロップダウンをクリックします。これで、未使用のファイルに関連するアクションが表示されます。
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 インクルード クリーンアップ処理中に file1 を file2 に置き換えます。 たとえば、 stdio.h よりも cstdio を使いたい場合があるかもしれません。 #include <cstdio> と #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 |