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 の構成というラベルが付けられます。
構成するには、ステータスバーのインジケーターを選択します。これにより、構成クイックピックが表示されます。クイックピックは、C/C++ コンパイラーの選択またはインストールに役立ちます。
ステータスバーのインジケーターが表示されない場合は、プロジェクトの c_cpp_properties.json
ファイルを確認することもできます。このファイルには、すべての IntelliSense 構成設定が保存されています。コマンドパレット (⇧⌘P (Windows、Linux Ctrl+Shift+P)) から C/C++: 構成の編集 (UI) を選択して、このファイルに移動します。IntelliSense mode
を確認して構成を見つけてください。c_cpp_properties.json
ファイルの詳細については、スキーマのリファレンスを参照してください。
IntelliSense を構成する方法
IntelliSense の構成は、ワークスペースに自動的に作成される c_cpp_properties.json
ファイルに保存されます。以下の 3 つのオプションはすべて、c_cpp_properties.json
ファイルを編集する異なる方法です。
オプション 1. 構成クイックピックから構成オプションを選択する
コマンドパレット (⇧⌘P (Windows、Linux Ctrl+Shift+P)) で IntelliSense 構成の選択 と入力してクイックピックを開きます。これにより、C/C++ 拡張機能がマシン上で見つけたすべての構成オプションがドロップダウンで表示されます。
利用可能なオプションのいずれかを選択します。コンパイラーを選択した場合、このコンパイラーは既定で 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
ファイルのユーザーインターフェイスです。
コンパイラーパス フィールドに、プロジェクトのビルドに使用するコンパイラーの完全パスを設定します。たとえば、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
フォルダーに作成されます。
コンパイラーを追加するには、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 拡張機能が構成プロバイダーになることができます。拡張機能を構成プロバイダーとして追加するには、構成クイックピックから拡張機能を選択するか、高度な設定の下にある構成プロバイダーフィールドを編集して構成 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 では、詳細設定とコンパイルコマンドフィールドの下にファイルを追加できます。たとえば、compile_commands.json
ファイルがワークスペースのルートにある場合、コンパイルコマンドフィールドに ${workspaceFolder}/compile_commands.json
と入力します。それ以外の場合は、compileCommands
構成プロパティを使用して c_cpp_properties.json
ファイルに直接追加できます。
コンパイルコマンドデータベースに、エディターで開いたファイルに対応する翻訳単位のエントリが含まれていない場合、代わりに基本構成 (c_cpp_properties.json
にある) が使用されます (includePath
や defines
など)。C/C++ 拡張機能が基本構成に戻る場合、言語ステータスバーのインジケーターには、ステータスバーに IntelliSense の構成というラベルが表示されます。
カスタム構成プロバイダーと compile_commands.json
ファイルを指定した場合、IntelliSense 構成についてはカスタム構成プロバイダーが最初にクエリされます。
プログラムにワークスペース内または標準ライブラリパス内にないヘッダーファイルが含まれている場合、インクルードパスを変更できます。C/C++ 拡張機能は、コンパイラーパスで指定されたコンパイラーをクエリすることで、インクルードパスを設定します。拡張機能がターゲットシステムライブラリのパスを見つけられない場合は、インクルードパスを手動で入力できます。
言語ステータスバーを使用して IntelliSense のアクティビティを確認する
言語ステータスバーを使用して、IntelliSense がファイルでアクティブに動作しているかどうかを判断できます。言語ステータスバーを呼び出すには、C++ ファイルを開きます。ステータスバーには {} C++ というテキストが表示されます。{} シンボルにカーソルを合わせると、言語ステータスバーのフライアウトが開きます。フライアウトの最上位項目は IntelliSense のステータスを示します。以下に、さまざまなステータスとその意味を示します。
- IntelliSense: 準備完了 = IntelliSense は C/C++ 拡張機能用に構成されており、コードを記述するなど、エディターを操作すると自動的にアクティブ化されます。
- IntelliSense: 更新中 = IntelliSense は、コードに加えている変更に基づいて、コード補完、構文の強調表示などを判別するために積極的に動作しています。
言語ステータスバーフライアウトの任意の項目の右側にあるピンアイコンを選択すると、その項目をステータスバーに永続的にピン留めできます。
次のステップ
- IntelliSense 構成の詳細については、既定の設定のカスタマイズを参照してください。
- 設定の構成で問題が発生した場合は、GitHub discussions で議論を開始してください。修正が必要な問題を発見した場合は、GitHub issues で問題を報告してください。
- c_cpp_properties スキーマを調べてください。
- C++ 拡張機能の概要を確認してください。