IntelliSense 用に C++ プロジェクトを構成する
場合によっては、IntelliSense が正常に動作するように C++ プロジェクトを手動で構成することが必要になる場合があります。 MSBuild プロジェクトの場合 (.vcxproj ファイルに基づいて)、プロジェクトのプロパティの設定を調整できます。 MSBuild 以外のプロジェクトの場合は、プロジェクトのルート ディレクトリにある CppProperties.json ファイルの設定を調整します。 場合によっては、IntelliSense がマクロ定義を理解するのに役立つヒント ファイルを作成することが必要になる場合があります。 Visual Studio IDE は、IntelliSense の問題を特定して修正するのに役立ちます。
単一ファイルの IntelliSense
プロジェクトに含まれていないファイルを開くと、Visual Studio によっていくつかの IntelliSense サポートが提供されますが、既定ではエラーを示す波線は表示されません。 ナビゲーション バー[その他のファイル]と表示されている場合は、誤ったコードでエラー波線が表示されない理由や、プリプロセッサ マクロが定義されていない理由が説明されている可能性があります。
エラー一覧を確認する
ファイルが単一ファイル モードで開かされておらず、IntelliSense が正しく動作しない場合は、まずエラー一覧ウィンドウを確認します。 現在のソース ファイルとすべての含まれているヘッダー ファイルの IntelliSense エラーをすべて表示するには、ドロップダウンから [Build + IntelliSense] を選択します。
エラー一覧する
IntelliSense では、最大 1,000 個のエラーが生成されます。 ソース ファイルに含まれるヘッダー ファイルに 1000 を超えるエラーがある場合、ソース ファイルには、ソース ファイルの先頭に 1 つのエラー 波線のみが表示されます。
#include パスが正しいことを確認する
MSBuild プロジェクト
Visual Studio IDE の外部でビルドを実行し、ビルドが成功しても IntelliSense が正しくない場合、コマンド ラインが 1 つ以上の構成のプロジェクト設定と同期していない可能性があります。 ソリューション エクスプローラー でプロジェクト ノード 右クリックし、現在の構成とプラットフォームのすべての #include パスが正しいことを確認します。 すべての構成とプラットフォームでパスが同一の場合は、[すべての構成] 選択し、[すべてのプラットフォーム] し、パスが正しいことを確認できます。
VC_IncludePathなどのビルド マクロの現在の値を表示するには、[ディレクトリを含める] 行を選択し、右側のドロップダウンをクリックします。 [><編集] を選択し、[マクロ] ボタンをクリックします。
メイクファイル プロジェクト
NMake プロジェクト テンプレートに基づくメイクファイル プロジェクトの場合は、左側のペインで [NMake] を選択してから、[IntelliSense] カテゴリの下で [インクルードの検索パス] を選択します。
メイクファイルプロジェクトのインクルードパス
フォルダー プロジェクトを開く
CMake プロジェクトの場合は、CMakeLists.txtのすべての構成に対して #include パスが正しく指定されていることを確認します。 他の種類のプロジェクトでは、CppProperties.json ファイルが必要な場合があります。 詳細については、「CppProperties.jsonを使用した IntelliSense の構成」を参照してください。 ファイルで定義されている各構成のパスが正しいことを確認します。
CppProperties.json ファイルに構文エラーがある場合、影響を受けるファイル内の IntelliSense が正しくありません。 Visual Studio の [出力] ウィンドウにエラーが表示されます。
タグ パーサーの問題
タグ パーサーは、参照とナビゲーションに使用される "あいまい" C++ パーサーです。 非常に高速ですが、すべてのコードコンストラクトを完全に理解しようとはしません。
たとえば、プリプロセッサ マクロは評価されないため、それらを大量に使用するコードが誤って解析される可能性があります。 タグ パーサーが未知のコードコンストラクトを検出すると、コードのその領域全体がスキップされる可能性があります。
Visual Studio でこの問題が発生する一般的な方法は 2 つあります。
ナビゲーション バーに最も内側のマクロが表示されている場合、現在の関数定義はスキップされました。
をスキップする
IDE は、既に定義されている関数の関数定義を作成することを提供します。
を定義することを提案します
このような問題を解決するには、ソリューション ディレクトリのルート cpp.hint という名前のファイルを追加します。 詳細については、ヒントファイルを参照してください。
タグ パーサー エラーは、エラー一覧 ウィンドウに表示されます。
診断ログを使用してプロジェクト設定を検証する
IntelliSense コンパイラで、パスとプリプロセッサ マクロを含む適切なコンパイラ オプションが使用されているかどうかを確認するには、Tools > Options > Text Editor > C/C++ > Advanced > Diagnostic Loggingで IntelliSense コマンド ラインの診断ログを有効にします。 [ログの有効化] を True、[ログ レベル] を 5 (最も詳細)、[ログ フィルター] を 8 (IntelliSense ログ) に設定します。
これで、IntelliSense コンパイラに渡されるコマンド ラインが出力ウィンドウに表示されます。 出力例を次に示します。
[IntelliSense] Configuration Name: Debug|Win32
[IntelliSense] Toolset IntelliSense Identifier:
[IntelliSense] command line options:
/c
/I.
/IC:\Repo\Includes
/DWIN32
/DDEBUG
/D_DEBUG
/Zc:wchar_t-
/Zc:forScope
/Yustdafx.h
この情報は、IntelliSense が不正確な情報を提供する理由を理解するのに役立つ場合があります。 たとえば、プロジェクトの Include ディレクトリに $(MyVariable)\Include が含まれており、診断ログに /I\Include がインクルード パスとして表示されている場合、$(MyVariable) が評価されておらず、最終的なインクルード パスから削除されたことを意味します。
IntelliSense ビルドについて
Visual Studio では、専用の C++ コンパイラを使用して、すべての IntelliSense 機能を強化するデータベースを作成および管理します。 IntelliSense データベースをコードと同期させるために、Visual Studio は、プロジェクト設定またはソース ファイルで行われた特定の変更に応じて、IntelliSense のみのビルドをバックグラウンド タスクとして自動的に起動します。
ただし、場合によっては、Visual Studio で IntelliSense データベースがタイムリーに更新されない場合があります。 たとえば、git pull を実行したり、git checkout コマンドを したりすると、Visual Studio でファイルの変更を検出するのに最大 1 時間かかる場合があります。 ソリューション エクスプローラーの でプロジェクト ノードを右クリックし、[ソリューションの再スキャン]を選択することで、ソリューション内のすべてのファイル強制的に再スキャンできます。
IntelliSense ビルドエラーのトラブルシューティング
IntelliSense ビルドではバイナリは生成されませんが、それでも失敗する可能性があります。 エラーの原因の 1 つは、カスタム .props または .targets ファイルです。 Visual Studio 2017 バージョン 15.6 以降では、IntelliSense のみのビルド エラーが出力ウィンドウに記録されます。 これらを表示するには、[出力元の表示] を [ソリューション] に設定します。
ソリューション エラーの出力ウィンドウ
エラー メッセージで、デザイン時トレースを有効にするように指示される場合があります。
error: Designtime build failed for project 'E:\src\MyProject\MyProject.vcxproj',
configuration 'Debug|x64'. IntelliSense might be unavailable.
Set environment variable TRACEDESIGNTIME=true and restart
Visual Studio to investigate.
環境変数 TRACEDESIGNTIME を true に設定し、Visual Studio を再起動すると、%TEMP% ディレクトリにログ ファイルが表示され、ビルド エラーの診断に役立つ可能性があります。
TRACEDESIGNTIME 環境変数の詳細については、「Roslyn および Common Project System」を参照してください。 これらの記事の情報は、C++ プロジェクトに関連しています。