VS Codeのエージェントモードを拡張するには、を試してください!

C/C++ IntelliSense の構成

この記事では、C/C++ 拡張機能を構成して、Visual Studio Code で C++ 固有の IntelliSense の候補を提供する方法について説明します。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 というラベルの警告サイン付きの黄色いインジケーターを表示します。

Configure IntelliSense indicator in the status bar

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

ステータス バー インジケーターが表示されない場合は、プロジェクトの c_cpp_properties.json ファイルを確認することもできます。このファイルには、すべての IntelliSense 構成設定が格納されます。コマンド パレット (⇧⌘P (Windows, Linux Ctrl+Shift+P)) から C/C++: Edit Configurations (UI) を選択して、このファイルに移動します。IntelliSense mode をチェックして構成を確認します。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)) で Select IntelliSense Configuration と入力してクイック ピックを開くと、C/C++ 拡張機能によってマシン上で見つかったすべての構成オプションのドロップダウンが表示されます。

Select a compiler to configure for IntelliSense Quick Pick

利用可能なオプションのいずれかを選択します。コンパイラを選択した場合、このコンパイラは IntelliSense によって既定で使用されます。いつでも Configure IntelliSense クイック ピックに戻って、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 ファイルのユーザー インターフェイスです。

C/C++ IntelliSense Configurations user interface

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 ファイルが作成されます。

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 ファイル

構成プロバイダー

カスタム構成プロバイダーは、VS Code の別の拡張機能であり、C/C++ 拡張機能よりも正確な C++ IntelliSense 構成を提供する可能性があります。たとえば、CMake または Make ビルド システムの場合、Makefile Tools または CMake Tools 拡張機能が構成プロバイダーになることができます。拡張機能を構成プロバイダーとして追加するには、構成クイック ピックで拡張機能を選択するか、Advanced Settings の下の Configuration provider フィールドを編集して構成 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 では、ファイルは Advanced ConfigurationsCompile commands フィールドの下に追加できます。たとえば、compile_commands.json ファイルがワークスペースのルートにある場合、Compile commands フィールドに ${workspaceFolder}/compile_commands.json と入力します。それ以外の場合は、compileCommands 構成プロパティを使用して c_cpp_properties.json ファイルに直接追加できます。

コンパイル コマンド データベースに、エディターで開いたファイルに対応する翻訳単位のエントリが含まれていない場合は、代わりに基本構成 (c_cpp_properties.json にある) が使用されます (includePathdefines など)。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 は、コードに加えている変更に基づいて、コード補完、構文の強調表示などを判断するためにアクティブに動作しています。

C++ extension language status bar flyout

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

次のステップ