既定の設定のカスタマイズ
c_cpp_properties.json
で設定されたプロパティの既定値をオーバーライドできます。
Visual Studio Code の設定
次の C_Cpp.default.*
設定は、c_cpp_properties.json
の構成ブロック内の各プロパティにマップされます。具体的には
C_Cpp.default.includePath : string[]
C_Cpp.default.defines : string[]
C_Cpp.default.compileCommands : string
C_Cpp.default.macFrameworkPath : string[]
C_Cpp.default.forcedInclude : string[]
C_Cpp.default.intelliSenseMode : string
C_Cpp.default.compilerPath : string
C_Cpp.default.compilerArgs : string[]
C_Cpp.default.configurationProvider : string
C_Cpp.default.customConfigurationVariables : object | null
C_Cpp.default.cStandard : c89 | c99 | c11 | c17
C_Cpp.default.cppStandard : c++98 | c++03 | c++11 | c++14 | c++17 | c++20 | c++23
C_Cpp.default.enableConfigurationSquiggles : boolean
C_Cpp.default.mergeConfigurations : boolean
C_Cpp.default.systemIncludePath : string[]
C_Cpp.default.windowsSdkVersion : string
C_Cpp.default.browse.path : string[]
C_Cpp.default.browse.defines : string[]
C_Cpp.default.browse.dotConfig : string
C_Cpp.default.browse.databaseFilename : string
C_Cpp.default.browse.limitSymbolsToIncludedHeaders : boolean
これらの設定には、VS Code 設定のすべての利点があり、既定値、"ユーザー"、"ワークスペース"、および "フォルダー" 値を持つことができます。したがって、"ユーザー" 設定で C_Cpp.default.cppStandard
のグローバル値を設定し、開くすべてのフォルダーに適用できます。いずれかのフォルダーで別の値が必要な場合は、"フォルダー" または "ワークスペース" 値を追加して値をオーバーライドできます。
VS Code 設定のこのプロパティを使用すると、各ワークスペースを個別に構成できるため、c_cpp_properties.json
ファイルはオプションになります。
`c_cpp_properties.json` の更新された構文
特別な変数が c_cpp_properties.json
の受け入れられる構文に追加され、上記の VS Code 設定からの値を挿入するように拡張機能に指示します。c_cpp_properties.json
の任意の設定の値を "${default}" に設定すると、拡張機能はそのプロパティの VS Code 既定の設定を読み取って挿入するように指示します。例:
"configurations": [
{
"name": "Win32",
"includePath": [
"additional/paths",
"${default}"
],
"defines": [
"${default}"
],
"macFrameworkPath": [
"${default}",
"additional/paths"
],
"forcedInclude": [
"${default}",
"additional/paths"
],
"compileCommands": "${default}",
"browse": {
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": "${default}",
"path": [
"${default}",
"additional/paths"
]
},
"intelliSenseMode": "${default}",
"cStandard": "${default}",
"cppStandard": "${default}",
"compilerPath": "${default}"
}
],
string[] を受け入れるプロパティの場合、上記の構文を使用すると、VS Code 設定を追加の値で拡張できるため、VS Code 設定に共通パスをリストし、c_cpp_properties.json
に構成固有の設定を含めることができます。
プロパティが c_cpp_properties.json
にない場合、拡張機能は VS Code 設定の値を使用します。開発者が特定のフォルダーに適用されるすべての設定に値を割り当てると、c_cpp_properties.json
は不要になるため、.vscode フォルダーから削除できます。
c_cpp_properties.json 設定ファイルの詳細については、c_cpp_properties.json リファレンスを参照してください。
システムインクルード
フォルダーのインクルードパスとは別にシステムインクルードパスを指定できる新しい設定が追加されます。この設定に値がある場合、compilerPath
設定で指定されたコンパイラから拡張機能が取得するシステムインクルードパスは、拡張機能が IntelliSense に使用するパス配列に追加されません。デフォルトに何らかの変更を加えたい場合に、これを使用することに関心のあるユーザーのために、コンパイラのデフォルトからこの値を設定する VS Code コマンドを提供することをお勧めします。
C_Cpp.default.systemIncludePath : string[]
システムインクルードパス/定義解決戦略
拡張機能は、IntelliSense エンジンに送信するシステム includePath と定義を次の方法で決定します
-
compileCommands
に有効な値があり、エディターで開いているファイルがデータベースにある場合は、データベースエントリのコンパイルコマンドを使用して、インクルードパスと定義を決定します。- システムインクルードパスと定義は、次のロジック (順番に) を使用して決定されます
systemIncludePath
に値がある場合は、それを使用します (システム定義を検索するために次のステップに進みます)。compilerPath
が有効な場合は、クエリを実行します。- コマンドの最初の引数をコンパイラとして解釈し、クエリを試みます。
compilerPath
が "" の場合は、システムインクルードパスと定義に空の配列を使用します。compilerPath
が未定義の場合は、システム上のコンパイラを探してクエリを実行します。
- システムインクルードパスと定義は、次のロジック (順番に) を使用して決定されます
-
compileCommands
が無効であるか、現在のファイルがデータベースにリストされていない場合は、IntelliSense の構成でincludePath
およびdefines
プロパティを使用します。- システムインクルードパスと定義は、次のロジック (順番に) を使用して決定されます
systemIncludePath
に値がある場合は、それを使用します (システム定義を検索するために次のステップに進みます)。compilerPath
が有効な場合は、クエリを実行します。compilerPath
が "" の場合は、システムインクルードパスと定義に空の配列を使用します (これらは、現在の構成のincludePath
およびdefines
に既にあると想定されます)。compilerPath
が未定義の場合は、システム上のコンパイラを探してクエリを実行します。
- システムインクルードパスと定義は、次のロジック (順番に) を使用して決定されます
システムインクルードは、includePath
または browse.path
変数に追加しないでください。拡張機能が includePath
プロパティでシステムインクルードパスを検出した場合、システムインクルードパスが最後に追加され、正しい順序になるように (これは GCC/Clang で特に重要です)、それらをサイレントに削除します。
拡張されたセマンティック色分け
IntelliSense が有効になっている場合、Visual Studio Code C/C++ 拡張機能はセマンティック色分けをサポートします。クラス、関数、変数などの色の設定の詳細については、拡張された色分けを参照してください。
拡張機能のログ記録
問題レポートの情報に基づいて診断できない拡張機能の問題が発生している場合は、ログ記録を有効にしてログを送信するように求めることがあります。ログの収集方法の詳細については、C/C++ 拡張機能のログ記録を参照してください。