🚀 VS Code で で入手しましょう!

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++ 拡張機能は、IntelliSense を構成するというラベルの付いた警告サインとともに、ステータスバーに黄色のインジケーターを表示します。

Configure IntelliSense indicator in the status bar

構成するには、ステータスバーインジケーターを選択します。これにより、構成クイック選択が表示されます。クイック選択は、C/C++ コンパイラを選択またはインストールするのに役立ちます。

ステータスバーインジケーターが表示されない場合は、プロジェクトの c_cpp_properties.json ファイルを確認することもできます。このファイルには、IntelliSense のすべての構成設定が保存されています。コマンドパレット (⇧⌘P (Windows、Linux Ctrl+Shift+P)) から C/C++: 構成の編集 (UI) を選択して、このファイルに移動します。IntelliSense モードをチェックして、構成を見つけてください。c_cpp_properties.json ファイルの詳細については、スキーマ参照を確認してください。

Command Palette filtered on C/C++ Edit Configurations command

IntelliSense を構成する方法

IntelliSense の構成は、ワークスペースに自動的に作成される c_cpp_properties.json ファイルに保存されます。次の 3 つのオプションはすべて、c_cpp_properties.json ファイルを編集するさまざまな方法です。

オプション 1. 構成クイック選択を使用して構成オプションを選択する

コマンドパレット (⇧⌘P (Windows、Linux Ctrl+Shift+P)) に IntelliSense 構成の選択 と入力してクイック選択を開きます。これにより、C/C++ 拡張機能がマシン上で見つけたすべての構成オプションのドロップダウンが表示されます。

Select a compiler to configure for IntelliSense Quick Pick

利用可能なオプションのいずれかを選択します。コンパイラを選択すると、このコンパイラはデフォルトで IntelliSense によって使用されます。IntelliSense の構成クイック選択には、IntelliSense の構成に使用するオプションを変更するために、いつでも戻ることができます。

クイック選択でオプションが利用できない場合は、システムでコンパイラを識別できませんでした。マシンを手動で参照するか、C/C++ コンパイラをインストールできます。Windows マシンにインストールするには、C/C++ コンパイラのインストール方法に関するステップバイステップのチュートリアルにリダイレクトする コンパイラのインストールを支援する オプションを選択します。macOS または Linux マシンでは、コンパイラのインストール を選択し、プロンプトに従って C++ コンパイラをマシンにインストールします。

オプション 2. UI を使用して IntelliSense 構成を編集する

コマンドパレット (⇧⌘P (Windows、Linux Ctrl+Shift+P)) から C/C++: 構成の編集 (UI) を選択して、IntelliSense 構成を開きます。このビューは、c_cpp_properties.json ファイルのユーザーインターフェースです。

C/C++ IntelliSense Configurations user interface

コンパイラのパス フィールドを、プロジェクトのビルドに使用しているコンパイラのフルパスに設定します。たとえば、Linux で GCC のデフォルトのインストールパスを使用する場合、コンパイラのパスは /usr/bin/gcc です。IntelliSense モード を、使用しているコンパイラアーキテクチャ固有のバリアントに設定します。

オプション 3. c_cpp_properties.json ファイルを直接編集する

c_cpp_properties.json ファイルを直接編集して、構成をカスタマイズできます。コマンドパレット (⇧⌘P (Windows、Linux Ctrl+Shift+P)) から C/C++ 構成の編集 (JSON) コマンドを使用すると、c_cpp_properties.json ファイルがワークスペースの .vscode フォルダーに作成されます。

Command Palette filtered on C/C++ Edit Configurations (JSON) command

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 の別の拡張機能です。たとえば、Makefile Tools または CMake Tools 拡張機能を構成プロバイダーにできる CMake または Make ビルドシステムの場合です。拡張機能を構成プロバイダーとして追加するには、構成クイック選択で拡張機能を選択するか、詳細設定 の下の 構成プロバイダー フィールドを編集して構成 UI に追加するか、configurationProvider フィールドを c_cpp_properties.json ファイルに追加します。たとえば、CMake 拡張機能の場合、追加するパスは ms-vscode.cmake-tools になります。

C/C++ Advanced Settings Configuration provider

C/C++ 拡張機能は、カスタム構成プロバイダーをシステムでスキャンします。カスタム構成プロバイダーが 1 つだけ識別された場合、この構成プロバイダーは IntelliSense 用に自動的に構成されます。複数の構成プロバイダーが識別された場合は、構成クイック選択を開いて、拡張機能が使用する必要があるものを選択する必要があります。

compile_commands.json ファイル

IntelliSense 構成を提供するもう 1 つのオプションは、プロジェクト内のすべてのファイルに使用される正確なコンパイルコマンドを記述した compile_commands.json ファイルです。このファイルは、CMake や Bazel などのビルドシステムによって、プロジェクトを構成するときにコマンドライン引数を設定することで生成されることがよくあります。compile_commands.json ファイルは、「IntelliSense を構成する方法」セクションで説明されているのと同じ方法で、構成クイック選択、UI を使用した構成の編集、または c_cpp_properties.json ファイルの直接編集によって構成用に選択できます。構成 UI では、ファイルは 詳細構成 および コンパイルコマンド フィールドの下に追加できます。たとえば、compile_commands.json ファイルがワークスペースのルートにある場合は、コンパイルコマンド フィールドに ${workspaceFolder}/compile_commands.json と入力します。それ以外の場合は、compileCommands 構成プロパティを使用して、c_cpp_properties.json ファイルに直接追加できます。

コンパイルコマンドデータベースに、エディターで開いたファイルに対応する変換ユニットのエントリが含まれていない場合、基本構成 (c_cpp_properties.json にあります) が代わりに使用されます (includePathdefines など)。C/C++ 拡張機能が基本構成に戻ると、言語ステータスバーインジケーター に、ステータスバーに IntelliSense を構成する というラベルが表示されます。

カスタム構成プロバイダーと compile_commands.json ファイルを指定した場合、カスタム構成プロバイダーが IntelliSense 構成について最初にクエリされます。

プログラムに、ワークスペースにないヘッダーファイルまたは標準ライブラリパスにないヘッダーファイルが含まれている場合は、インクルードパス を変更できます。C/C++ 拡張機能は、コンパイラのパス で指定されたコンパイラをクエリしてインクルードパスを設定します。拡張機能がターゲットシステムライブラリのパスを見つけられない場合は、インクルードパスを手動で入力できます。

言語ステータスバーを使用して IntelliSense のアクティビティを確認する

言語ステータスバーを使用して、IntelliSense がファイルでアクティブに動作しているかどうかを判断できます。言語ステータスバーを呼び出すには、C++ ファイルを開きます。ステータスバーにテキスト {} C++ が表示されます。{} 記号の上にカーソルを合わせると、言語ステータスバーフライアウトが開きます。フライアウトの最上位項目は、IntelliSense のステータスを示します。さまざまなステータスとその意味は次のとおりです。

  • IntelliSense: 準備完了 = IntelliSense は C/C++ 拡張機能用に構成されており、コードの記述など、エディターを操作すると自動的にアクティブになります。
  • IntelliSense: 更新中 = IntelliSense は、コード補完、構文の強調表示などを、コードに加えた変更に基づいて決定するためにアクティブに動作しています。

C++ extension language status bar flyout

言語ステータスバーフライアウトの任意の項目の右側にあるピンアイコンを選択して、ステータスバーに永続的にピン留めできます。

次のステップ