C/C++ IntelliSense の構成
この記事では、Visual Studio Code で C++ 固有の IntelliSense 候補を提供するための C/C++ 拡張機能の構成について説明します。IntelliSense は、VS Code に組み込まれている便利なツールで、コード補完、パラメーター情報、構文強調表示、コードアクション (電球)、メンバーリストなど、さまざまなコード編集機能を提供して、より速く効率的にコーディングできるようにします。
C/C++ IntelliSense を使用するには、C/C++ コンパイラーがシステムにインストールされているだけです。C/C++ コンパイラーは、システムインクルードパスの場所やその他の設定など、C++ 固有の情報を IntelliSense に提供します。プロジェクトレベルの構成については、プロジェクトレベルの IntelliSense 構成セクションを参照してください。
C/C++ 拡張機能は、いつコア IntelliSense 機能を構成しますか?
コンパイラーは、コア IntelliSense 機能を構成するための唯一の要件です。IntelliSense 用のコンパイラーを識別するために、C/C++ 拡張機能は、Clang、GCC、MinGW、cygwin、cygwin64、MSVC などのコンパイラーの一般的なパスをマシンでスキャンします。これらのコンパイラーのいずれかが識別され、安全な場所にある場合、それらは IntelliSense 用に自動的に構成されます。そうでない場合は、このコンパイラーを IntelliSense 用に構成する必要があることを確認するように求める通知が表示されます。これらのどちらのシナリオでも、選択されたコンパイラーはデフォルトのコンパイラーとしても設定されます。
IntelliSense が構成されているかどうかを確認する方法
IntelliSense が構成されていない場合、C/C++ 拡張機能は、ステータスバーに「Configure IntelliSense」という警告サインの付いた黄色のインジケーターを表示します。

構成するには、ステータスバーのインジケーターを選択します。これにより、構成クイックピックが表示されます。クイックピックは、C/C++ コンパイラーを選択またはインストールするのに役立ちます。
ステータスバーのインジケーターが表示されない場合は、プロジェクトの c_cpp_properties.json ファイルを確認することもできます。このファイルには、IntelliSense のすべての構成設定が保存されています。コマンドパレット (⇧⌘P (Windows, Linux Ctrl+Shift+P)) から「C/C++: Edit Configurations (UI)」を選択して、このファイルに移動します。IntelliSense mode を確認して構成を見つけます。

IntelliSense を構成する方法
IntelliSense の構成は、ワークスペースに自動的に作成される c_cpp_properties.json ファイルに保存されます。次の 3 つのオプションはすべて、c_cpp_properties.json ファイルを編集する異なる方法です。
オプション 1. 構成クイックピックを介して構成オプションを選択する
コマンドパレット (⇧⌘P (Windows, Linux Ctrl+Shift+P)) に「Select IntelliSense Configuration」と入力してクイックピックを開くと、C/C++ 拡張機能によってマシンで見つかったすべての構成オプションがドロップダウンで表示されます。

利用可能なオプションのいずれかを選択します。コンパイラーを選択すると、このコンパイラーは IntelliSense によってデフォルトで使用されます。IntelliSense を構成するために使用するオプションを変更するには、いつでも「Configure IntelliSense」クイックピックに戻ることができます。
クイックピックにオプションがない場合、システムでコンパイラーを識別できませんでした。マシンを手動で参照するか、C/C++ コンパイラーをインストールできます。Windows マシンにインストールするには、「Help me install a compiler」オプションを選択すると、C/C++ コンパイラーをインストールする方法のステップバイステップのチュートリアルにリダイレクトされます。macOS または Linux マシンでは、「Install a compiler」を選択し、プロンプトに従って C++ コンパイラーをマシンにインストールします。
オプション 2. UI を介して IntelliSense 構成を編集する
コマンドパレット (⇧⌘P (Windows, Linux Ctrl+Shift+P)) から「C/C++: Edit Configurations (UI)」を選択して、IntelliSense 構成を開きます。このビューは、c_cpp_properties.json ファイルのユーザーインターフェイスです。

「Compiler path」フィールドを、プロジェクトのビルドに使用しているコンパイラーの完全パスに設定します。たとえば、Linux で GCC のデフォルトのインストールパスを使用している場合、コンパイラーパスは /usr/bin/gcc です。「IntelliSense mode」を、使用しているコンパイラーのアーキテクチャ固有のバリアントに設定します。
オプション 3. c_cpp_properties.json ファイルを直接編集する
c_cpp_properties.json ファイルを直接編集して、構成をカスタマイズできます。コマンドパレット (⇧⌘P (Windows, Linux Ctrl+Shift+P)) から「C/C++ Edit Configurations (JSON)」コマンドを使用すると、ワークスペースの .vscode フォルダーに c_cpp_properties.json ファイルが作成されます。

コンパイラーを追加するには、compilerPath 変数を使用します。この変数は、プロジェクトのビルドに使用しているコンパイラーの完全パスです。たとえば、Linux で GCC のデフォルトのインストールパスを使用している場合、コンパイラーパスは /usr/bin/gcc です。
c_cpp_properties.json ファイルの詳細については、スキーマ参照を確認してください。
オペレーティングシステムに基づいて、c_cpp_configuration.json ファイルの以下のサンプルを選択してください。
> Windows での c_cpp_configuration.json のサンプル
MinGW のデフォルトインストールパスを使用する
{
"configurations": [
{
"name": "Win32",
"includePath": ["${workspaceFolder}/**"],
"defines": ["_DEBUG", "UNICODE", "_UNICODE"],
"windowsSdkVersion": "10.0.22621.0",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "${default}",
"compilerPath": "C:/msys64/mingw64/bin/gcc.exe"
}
],
"version": 4
}
> macOS での c_cpp_configuration.json のサンプル
Clang のデフォルトインストールパスを使用する
{
"configurations": [
{
"name": "Mac",
"includePath": ["${workspaceFolder}/**"],
"defines": [],
"macFrameworkPath": [
"/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks"
],
"compilerPath": "/usr/bin/clang",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "macos-clang-arm64"
}
],
"version": 4
}
> Linux での c_cpp_configuration.json のサンプル
GCC のデフォルトインストールパスを使用する
{
"configurations": [
{
"name": "Linux-GCC",
"includePath": ["${workspaceFolder}/**"],
"defines": [],
"compilerPath": "/usr/bin/g++",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "gcc-x64",
"browse": {
"path": ["${workspaceFolder}"],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
}
}
],
"version": 4
}
プロジェクトレベルの IntelliSense 構成
コンパイラーで IntelliSense を構成すると、コア IntelliSense 機能が提供されます。この設定は、基本構成と呼ばれます。次のものが必要なプロジェクトを設定するなど、より複雑な使用シナリオの場合
- 1 つまたは複数の異なるライブラリへの参照など、追加のインクルードパス
- 言語の動作 (したがって IntelliSense) に影響を与える特定のコンパイラー引数
IntelliSense を構成するには、他にも複数の方法があります。これらの追加構成は、次のいずれかの方法で提供できます。
c_cpp_properties.jsonファイルおよび関連設定- 別の VS Code 拡張機能の形式のカスタム構成プロバイダー (たとえば、Makefile Tools または CMake Tools 拡張機能)
compile_commands.jsonファイル
構成プロバイダー
カスタム構成プロバイダーは、C/C++ 拡張機能よりも正確な C++ IntelliSense 構成を提供する可能性のある VS Code の別の拡張機能です。たとえば、CMake または Make ビルドシステムの場合、Makefile Tools または CMake Tools 拡張機能が構成プロバイダーになることができます。拡張機能を構成プロバイダーとして追加するには、構成クイックピックを介して拡張機能を選択するか、「Advanced Settings」の「Configuration provider」フィールドを編集して構成 UI に追加するか、configurationProvider フィールドを c_cpp_properties.json ファイルに追加します。たとえば、CMake 拡張機能の場合、追加するパスは ms-vscode.cmake-tools です。

C/C++ 拡張機能は、システム内のカスタム構成プロバイダーをスキャンします。カスタム構成プロバイダーを 1 つだけ識別した場合、この構成プロバイダーは IntelliSense 用に自動的に構成されます。複数の構成プロバイダーが識別された場合は、構成クイックピックを開いて、拡張機能が使用するものを選択する必要があります。
compile_commands.json ファイル
IntelliSense 構成を提供するもう 1 つのオプションは、プロジェクト内のすべてのファイルに使用される正確なコンパイルコマンドを記述する compile_commands.json ファイルです。このファイルは、プロジェクトを構成するときにコマンドライン引数を設定することで、CMake や Bazel などのビルドシステムによって生成されることがよくあります。compile_commands.json ファイルは、IntelliSense を構成する方法セクションで説明したのと同じ方法、つまり構成クイックピックを介して、UI を介して構成を編集するか、c_cpp_properties.json ファイルを直接編集することで、構成のために選択できます。構成 UI では、「Advanced Configurations」および「Compile commands」フィールドの下にファイルを追加できます。たとえば、compile_commands.json ファイルがワークスペースのルートにある場合、「Compile commands」フィールドに ${workspaceFolder}/compile_commands.json と入力します。そうでない場合は、compileCommands 構成プロパティを使用して c_cpp_properties.json ファイルに直接追加できます。
コンパイルコマンドデータベースに、エディターで開いたファイルに対応する翻訳単位のエントリが含まれていない場合、代わりに基本構成 (c_cpp_properties.json にある) が使用されます (includePath や defines など)。C/C++ 拡張機能が基本構成に戻る場合、言語ステータスバーインジケーターは、ステータスバーに「Configure IntelliSense」というラベルを表示します。
カスタム構成プロバイダーと compile_commands.json ファイルを指定した場合、IntelliSense 構成についてカスタム構成プロバイダーが最初にクエリされます。
プログラムに、ワークスペースにないヘッダーファイル、または標準ライブラリパスにないヘッダーファイルが含まれている場合は、「Include Path」を変更できます。C/C++ 拡張機能は、「Compiler path」で指定されたコンパイラーをクエリしてインクルードパスを設定します。拡張機能がターゲットシステムライブラリのパスを見つけられない場合は、インクルードパスを手動で入力できます。
言語ステータスバーを使用して IntelliSense のアクティビティを確認する
言語ステータスバーを使用して、IntelliSense がファイルでアクティブに動作しているかどうかを判断できます。言語ステータスバーを呼び出すには、C++ ファイルを開きます。ステータスバーには「{} C++」というテキストが表示されます。「{}」記号にカーソルを合わせると、言語ステータスバーのフライアウトが開きます。フライアウトの一番上の項目は、IntelliSense のステータスを示します。以下に、さまざまなステータスとその意味を示します。
- IntelliSense: Ready = IntelliSense は C/C++ 拡張機能用に構成されており、コードを記述するなど、エディターと対話すると自動的にアクティブになります。
- IntelliSense: Updating = IntelliSense は、コードに加えている変更に基づいて、コード補完、構文強調表示などを決定するために積極的に動作しています。

言語ステータスバーのフライアウトの任意の項目の右側にあるピンアイコンを選択すると、ステータスバーに永久に固定できます。
次のステップ
- IntelliSense 構成の詳細については、「デフォルト設定のカスタマイズ」を参照してください。
- 設定の構成で問題が発生した場合は、GitHub discussions でディスカッションを開始するか、修正が必要な問題が見つかった場合は、GitHub issues で問題を報告してください。
- c_cpp_properties スキーマを探索してください。
- C++ 拡張機能の概要を確認してください。