【翻訳】Visual Studio Code C/C++ Extension の設定ファイル c_cpp_properties.json のリファレンスガイド

意外と日本語のちゃんとした説明が無くて困ったので、[`c_cpp_properties.json` Reference Guide](https://code.visualstudio.com/docs/cpp/c-cpp-properties-schema-reference) を翻訳します。

### 例

```json
{
    "env" : {
        "myDefaultIncludePath": [
            "${workspaceFolder}",
            "${workspaceFolder}/include"
        ],
        "myCompilerPath": "/usr/local/bin/gcc-7"
    },
    "configurations": [
        {
            "name": "Mac",
            "intelliSenseMode": "clang-x64",
            "includePath": [ "${myDefaultIncludePath}", "/another/path" ],
            "macFrameworkPath": [ "/System/Library/Frameworks" ],
            "defines": [ "FOO", "BAR=100" ],
            "forcedInclude": [ "${workspaceFolder}/include/config.h" ],
            "compilerPath": "/usr/bin/clang",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "compileCommands": "/path/to/compile_commands.json",
            "browse": {
                "path": [ "${workspaceFolder}" ],
                "limitSymbolsToIncludedHeaders": true,
                "databaseFilename": ""
            }
        }
    ],
    "version": 4
}
```
## トップレベルプロパティ

* #### `env`
  ユーザー定義変数の配列であり、標準環境変数を `${<var>}` または `${env:<var>}` という文法で置換することができます。文字列と、文字列の配列を入れることができます。

* #### `configurations`
  IntelliSense エンジンに対して、プロジェクトと設定の情報を指定するオブジェクトの配列です。デフォルトでは、この拡張機能はあなたのOSを元にした設定を生成します。追加の設定を加えることができます。

* #### `version`
  このフィールドは編集しないでください。これは `c_cpp_properties.json` ファイルの現在のバージョンを追跡するもので、拡張機能がどのプロパティや設定が存在するか、どうやって最新のバージョンにアップグレードするかを把握するためのものです。

## Configuration プロパティ

* #### `name`
  この設定のわかりやすい名前です。"Linux", "Mac", "Win32" は特別な名前で、追加の設定をしていない限り、拡張機能に各OSのデフォルト値を読み込むことを指示します。VS Code のステータスバーには、どの設定がアクティブであるかが表示されます。ステータスバーのラベルをクリックすることで、アクティブな設定を変更することができます。

* #### `intelliSenseMode`
  `"C_Cpp.intelliSenseEngine"` が "Default" に設定されている場合の、IntelliSense エンジンの動作モードを指定します。`"msvc-x64"` は64ビットポインタサイズの Visual Studio に対応します。`"clang-x64"` は64ビットポインタサイズの Clang に対応します。`"gcc-x64"` は64ビットポインタサイズの GCC に対応します。Windows はデフォルトで `"msvc-x64"` を使用し、macOS は `"clang-x64"` 、Linux は `"gcc-x64"` を使用します。

* #### `includePath`
  `"C_Cpp.intelliSenseEngine"` が "Default" に設定されている場合の、IntelliSense がソースからインクルードされているヘッダファイルを検索するパスのリストを指定します。これは基本的にあなたがコンパイラに `-I` スイッチで渡すパスのリストと同じです。パスの末尾が `/**` で終わる時、IntelliSense エンジンはそのディレクトリを再帰的に検索します。Visual Studio がインストールされた Windows の場合、または `compilerPath` 設定でコンパイラが指定されている場合、このリストにシステムインクルードパスを含める必要はありません。

* #### `macFrameworkPath`
  `"C_Cpp.intelliSenseEngine"` が "Default" に設定されている場合、フレームワークヘッダを IntelliSense が検索するのに使うパスのリストを指定します。これは基本的にあなたがコンパイラに `-F` スイッチで渡すパスのリストと同じです。IntelliSense はこれらのパスを再帰的に検索しません。

* #### `defines`
  `"C_Cpp.intelliSenseEngine"` が "Default" に設定されている場合、IntelliSense がコンパイル時に使うプリプロセッサシンボルのリストを指定します。これは基本的にあなたがコンパイラに `-D` スイッチで渡すシンボルのリストと同じです。Visual Studio がインストールされた Windows の場合、または `compilerPath` 設定でコンパイラが指定されている場合、このリストにデフォルトで定義されるシンボルを含める必要はありません。

* #### `forcedInclude` (optional)
  ソースファイルが処理される前にインクルードするファイルのリストを指定します。ファイルはリストの順序でインクルードされます。

* #### `compilerPath` (optional)
  あなたのプロジェクトをビルドするのに使うコンパイラの絶対パスを指定します。拡張機能は IntelliSense で使うシステムインクルードパスとデフォルトのシンボル定義を決定するためにコンパイラに問い合わせます。
  `-nostdinc++`、 `-m32`、 `-fno-ms-extensions` 等のインクルードや定義を変更するために引数を追加することができます。ただし、空白を含むパスはダブルクォーテーション `"` で囲む必要があります。
  システムインクルードパスと定義を自動的に問い合わせるのを無効にしたい時は、この値を空文字列 `""` に設定してください。これは一般的に推奨されませんが、いくつかの場合において自動的に問い合わせることが望ましくないことがあります。

* #### `cStandard`
  あなたのプロジェクトで IntelliSense が使う C 標準のリビジョンを指定します。

* #### `cppStandard`
  あなたのプロジェクトで IntelliSense が使う C++ 標準のリビジョンを指定します。

* #### `compileCommands` (optional)
  `"C_Cpp.intelliSenseEngine"` が "Default" に設定されている場合、このファイルの中で検出されたインクルードや定義は `includePath` と `defines` で設定された値の代わりに使われます。もし、このコンパイルコマンドデータベースが、あなたがエディタで開いているファイルに対応する翻訳単位のエントリーを含まない場合、警告メッセージが表示され、拡張機能は `includePath` と `defines` 設定を代わりに使います。
  >このファイルフォーマットについての詳しい情報は [Clang documentation](https://clang.llvm.org/docs/JSONCompilationDatabase.html) をご覧ください。いくつかのビルドシステム（例えば CMake）は[このファイルを生成します](https://cmake.org/cmake/help/v3.5/variable/CMAKE_EXPORT_COMPILE_COMMANDS.html)。

* #### `browse`
  `"C_Cpp.intelliSenseEngine"` が `"Tag Parser"` （"fuzzy" IntelliSense とか "browse" エンジンとも呼ばれます）に設定されている場合に使うプロパティの集合を指定します。これらのプロパティは "Go To Definition/Declaration" 機能や、"Default" IntelliSense エンジンがソースファイル中の #include を解決できない時にに使われます。

### Browse プロパティ

* #### `path`
  Tag Parser がソースファイルからインクルードされたヘッダを検索するのに使うパスのリストを指定します。もし省略された場合は、`includePath` が `path` として使われます。パスの末尾が `/*` または `\*` でない限り、Tag Parser は自動的にこれらのパスのサブフォルダーを検索します。例えば、`/usr/include` の指定ならば、Tag Parser は `include` フォルダーとそのサブフォルダーを検索するのに対し、`/usr/include/*` ならば Tag Parser は `/usr/include` のいずれのサブフォルダーも検索しません。

* #### `limitSymbolsToIncludedHeaders`
  true であれば、Tag Parser は `${workspaceFolder}` の中のソースファイルから直接または間接的にインクルードされたファイルのみをパースします。false であれば、Tag Parser は `path` リストで指定されたパスの中から見つかった全てのファイルをパースします。

* #### `databaseFilename`
  設定されている時、拡張機能が Tag Parser のシンボルデータベースを、ワークスペースのデフォルト格納場所以外に保存する場所を指定します。相対パスが指定された時、ワークスペースのフォルダーではなく、ワークスペースのデフォルト格納場所からの相対パスとなります。ワークスペースフォルダーからの相対パスを指定するには、`${workspaceFolder}` 変数を使うことができます（例えば、 `${workspaceFolder}/.vscode/browse.vc.db`）。