場合によっては、IntelliSense が正常に動作するように C++ プロジェクトを手動で構成することが必要になる場合があります。 MSBuild プロジェクトの場合 ( .vcxproj ファイルに基づいて)、プロジェクトのプロパティの設定を調整できます。 MSBuild 以外のプロジェクトの場合は、プロジェクトのルート ディレクトリにある CppProperties.json ファイルの設定を調整します。 場合によっては、IntelliSense がマクロ定義を理解するのに役立つヒント ファイルを作成することが必要になる場合があります。 Visual Studio IDE は、IntelliSense の問題を特定して修正するのに役立ちます。
単一ファイルの IntelliSense
プロジェクトに含まれていないファイルを開くと、Visual Studio で一部の IntelliSense 機能が提供されますが、デフォルトではエラーの波線は表示されません。 ナビゲーション バーに [その他のファイル] と表示されている場合は、誤ったコードの下にエラー波線が表示されない理由や、プリプロセッサ マクロが定義されていない理由が説明されている可能性があります。
エラー一覧を確認する
ファイルが単一ファイル モードで開いていない場合、IntelliSense が正しく動作しない場合、最初に確認する場所は [エラー一覧] ウィンドウです。 現在のソース ファイルとすべての含まれているヘッダー ファイルの IntelliSense エラーをすべて表示するには、ドロップダウンから [Build + IntelliSense] を選択します。
IntelliSense では、最大 1,000 個のエラーが生成されます。 ソース ファイルに含まれるヘッダー ファイルに 1,000 を超えるエラーがある場合、ソース ファイルの先頭に表示されるエラーは 1 つだけです。
#include パスが正しいことを確認する
MSBuild プロジェクト
Visual Studio IDE の外部でビルドを実行し、ビルドが成功しても IntelliSense が正しくない場合は、コマンド ラインが 1 つ以上の構成のプロジェクト設定と同期していない可能性があります。 ソリューション エクスプローラー でプロジェクト ノード 右クリックし、現在の構成とプラットフォームのすべての #include パスが正しいことを確認します。 すべての構成とプラットフォームでパスが同一の場合は、[すべての構成] 選択し、[すべてのプラットフォーム] し、パスが正しいことを確認できます。
VC_IncludePathなどのビルド マクロの現在の値を表示するには、[インクルード ディレクトリ] ドロップダウンを選択します。 <Edit> を選び、[マクロ] ボタンを選択します。
メイクファイル プロジェクト
NMake プロジェクト テンプレートに基づくメイクファイル プロジェクトの場合は、[構成プロパティ] で [NMake] を選択し、[IntelliSense] カテゴリの [検索パスを含める] を選択します。
CMake プロジェクト
CMake プロジェクトの場合は、#include パスが、 CMakeLists.txt内のすべての構成に対して正しく指定されていることを確認します。 他の種類のプロジェクトでは、 CppProperties.json ファイルが必要な場合があります。 詳細については、「 CppProperties.jsonを使用してコード ナビゲーションを構成する 」を参照してください。 ファイルで定義されている各構成のパスが正しいことを確認します。
CppProperties.json ファイルに構文エラーがある場合、影響を受けるファイルの IntelliSense が正しくありません。 Visual Studio の [出力] ウィンドウにエラーが表示されます。
タグ パーサーの問題
タグ パーサーは、参照とナビゲーションに使用される あいまい C++ パーサーです。 高速ですが、すべてのコードコンストラクトを完全に理解しようとはしません。
たとえば、プリプロセッサ マクロは評価されないため、それらを大量に使用するコードが誤って解析される可能性があります。 タグ パーサーが未知のコードコンストラクトを検出すると、コードのその領域全体がスキップされる可能性があります。
Visual Studio でこの問題が発生する一般的な方法は 2 つあります。
IDE は、既に定義されている関数の関数定義を作成することを提供します。
ナビゲーション バーに最も内側のマクロが表示されている場合、現在の関数定義はスキップされました。
このコード スニペットは、関数 main 内で使用されるdo_ifのマクロ定義を示しています。 タグ パーサーはマクロを理解していないため、現在の関数の名前がメインであることを示すナビゲーション ドロップダウンではなく、マクロの名前 (do_if) が表示されます。
このような問題を解決するには、ソリューション ディレクトリのルートに cpp.hint という名前のファイルを追加します。 詳細については、ヒントファイルを参照してください。
タグ パーサー エラーは、エラー一覧 ウィンドウに表示されます。
診断ログを使用してプロジェクト設定を検証する
IntelliSense コンパイラで、パスやプリプロセッサ マクロを含む適切なコンパイラ オプションが使用されているかどうかを確認するには、IntelliSense コマンド ラインの診断ログを有効にします。
ツール>オプションのウィンドウを開き、すべての設定>、言語>、C/C++>、IntelliSense>、診断ログセクションを展開します。
[ 診断情報を出力ウィンドウに記録する ] チェック ボックスをオンにします。
ログ レベルの値を 5 (最も詳細) に設定します。
ログ フィルターの値を 8 (IntelliSense ログ) に設定します。
[ツール>オプション] ダイアログを開き、[テキスト エディター>C/C++>Advanced] セクションを展開します。
[診断ログ] グループで、[ログ記録を有効にする] オプションを True に設定します。
ログ レベルの値を 5 (最も詳細) に設定します。
[ログ フィルター] の値を 8 (IntelliSense ログ) に設定します。
[OK] を選択.
出力ウィンドウに、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 が不正確な情報を提供する理由を理解するのに役立つ場合があります。 たとえば、プロジェクトのインクルード ディレクトリに $(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 ビルドと デザイン時ビルドに関するページを参照してください。 これらの記事の情報は、C++ プロジェクトに関連しています。