C/C++ IntelliSense の構成
この記事では、Visual Studio Code で C++ 固有の IntelliSense 提案を提供するために、C/C++ 拡張機能を構成する方法について説明します。IntelliSense は、VS Code に組み込まれている便利なツールで、より迅速かつ効率的にコーディングできるように、さまざまなコード編集機能を提供します。たとえば、コード補完、パラメーター情報、構文ハイライト、コード アクション(電球アイコン)、メンバー リストなどは、すべて IntelliSense を使用して生成されます。
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++: 構成の編集 (UI) (C/C++: Edit Configurations (UI)) を選択します。構成を確認するには、IntelliSense モード (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 に使用されます。いつでも「Configure IntelliSense」クイック ピックに戻り、IntelliSense の構成に使用するオプションを変更できます。
クイック ピックにオプションが表示されない場合、システム内でコンパイラを特定できませんでした。手動でマシン内を検索するか、C/C++ コンパイラをインストールしてください。Windows マシンにインストールする場合は、C/C++ コンパイラのインストール手順を示すステップバイステップのウォークスルーにリダイレクトされる「Help me install a compiler」オプションを選択します。macOS または Linux マシンの場合は、「Install a compiler」を選択し、プロンプトに従って C++ コンパイラをマシンにインストールします。
オプション 2. UI を使用して IntelliSense 構成を編集する
コマンド パレット(⇧⌘P(Windows、Linux は Ctrl+Shift+P))から C/C++: 構成の編集 (UI) を選択して、IntelliSense 構成を開きます。このビューは c_cpp_properties.json ファイル用のユーザー インターフェースです。

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

コンパイラを追加するには、compilerPath 変数を使用します。この変数は、プロジェクトのビルドに使用しているコンパイラのフルパスです。たとえば、Linux で GCC のデフォルトのインストール パスを使用する場合、コンパイラのパスは /usr/bin/gcc です。
c_cpp_properties.json ファイルの詳細については、スキーマ リファレンスを参照してください。
お使いのオペレーティング システムに応じた、以下の c_cpp_properties.json ファイルのサンプルを選択してください
> Windows での c_cpp_properties.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_properties.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_properties.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 に追加するか、c_cpp_properties.json ファイルに configurationProvider フィールドを追加します。たとえば、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 ファイルがワークスペースのルートにある場合は、コンパイル コマンド フィールドに ${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++ 拡張機能は、コンパイラのパス で指定されたコンパイラに問い合わせを行うことで、インクルード パスを自動入力します。拡張機能がターゲット システム ライブラリのパスを検出できない場合は、インクルード パスを手動で入力できます。
言語ステータス バーを使用して IntelliSense のアクティビティを確認する
言語ステータス バーを使用して、IntelliSense がファイルに対してアクティブに動作しているかどうかを判断できます。言語ステータス バーを呼び出すには、C++ ファイルを開きます。ステータス バーに「{} C++」というテキストが表示されます。{} シンボルの上にホバーすると、言語ステータス バーのフライアウト(ポップアップ)が開きます。フライアウトの最上部にある項目が IntelliSense のステータスを示します。以下に、さまざまなステータスとその意味を示します。
- IntelliSense: Ready = C/C++ 拡張機能に対して IntelliSense が構成されており、コードを記述するなどしてエディターを操作すると自動的にアクティブになります。
- IntelliSense: Updating = コードに加えられた変更に基づいて、コード補完や構文ハイライトなどを決定するために、IntelliSense がアクティブに動作しています。

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