Macで<bits/stdc++.h>を使えるようにする



# 概要

MacにおいてC++で標準ライブラリすべてを一度にインクルードする`<bits/stdc++.h>`を使えるようにする方法をまとめました。エディタはVSCodeを仮定していて、OSのバージョンはmacOS Sequoiaです。

## 0. `<bits/stdc++.h>`とは
`<iostream>`や`<vector>`など標準ライブラリを全て読み込むためのコマンドです


## 1.gccをインストール
Homebrewをインストールしてない場合はまず、homebrewをインストールしてください。homebrewがインストールできたら、
```
brew install gcc
```
でgccをインストールできます。
## 2.pathを確認
g++-15などバージョン付きのコマンドがどこにあるか調べます。**Macにおいて標準的に入っているg++は実はg++ではなくClangなので注意です(後述)。** インストールしたGCCのバージョン名を確認して、

```
 which g++-15    
```
でpathを調べます。おそらく、`/opt/homebrew/bin/`か、`/usr/local/bin/`にあるはずです。バージョン名が分からなければ、
```
 ls /opt/homebrew/bin/g++-*
```
と
```
 ls /usr/local/bin/g++-*
```
を打ち込んでどちらにあるか確認してください。


## 3.c_cpp_properties.jsonを編集
VSCodeを開き、`Command + Shift + P`を押して、コマンドパレットから`C/C++: Edit Configurations (JSON)`を選択します。
```
{
    "configurations": [
        {
            "name": "Mac",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [],
            "compilerPath": "/opt/homebrew/bin/g++-15", 
            "cStandard": "c17",
            "cppStandard": "c++17",                 
            "intelliSenseMode": "macos-gcc-arm64"   
        }
    ],
    "version": 4
}
```
デフォルトの状態からの変更点は
`"compilerPath": "/usr/bin/clang"`を
`"compilerPath": "/opt/homebrew/bin/g++-15"`に、

`"intelliSenseMode": "macos-clang-arm64"`を
`"intelliSenseMode": "macos-gcc-arm64"` に、

`"cppStandard": "c++14"`を
`"cppStandard": "c++17"` に
にした点です。


## tasks.jsonの編集
`Command + Shift + P`を押して、コマンドパレットを開き、`Tasks: Configure Default Build Task`を開き`"command:"`に先ほど調べたパスを入れます。他はお好みで設定してください。以下に私の設定を載せておきます。



```
{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++ build active file",
            "command": "/opt/homebrew/bin/g++-15",//g++のパスを入れる
            "args": [//お好みで
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "Task generated by Debugger."
        }
    ],
    "version": "2.0.0"
}

```



## `<bits/stdc++.h>`をインクルード
`<bits/stdc++.h>`がインクルードできるかテストファイルをコンパイルしてみましょう

```
#include 
using namespace std;

int main() {
    cout << "Hello, World!" << std::endl;
    return 0;
}
```
うまくいっていれば、右上の三角ボタンを押すと実行ファイルができているはずです。
```
./<yourfilename>
```
で実行できます。


## 補足：Mac に入っているg++はclang++のエイリアスであり、g++ではない。

ターミナルで`g++ --version`と打ってみましょう。おそらく次のように表示されるはずです。
```
Apple clang version 17.0.0 (clang-1700.0.13.5)
Target: arm64-apple-darwin24.5.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
```

次に`clang++ --version`と打ってみましょう。上と全く同じ内容が表示されるはずです。
**これはg++の実体がClangであることを示しています。** これはもともとMacはコンパイラとしてGCCを使用していたが、Clnagに移行する際、既存のプログラムとの整合性を保つためにg++がclang++のエイリアス(別名)として登録されたという歴史のためであるようです。




## 参照
参考になるであろう記事を挙げておきます。

`<bits/stdc++.h>`については以下の解説が非常に参考になります。

https://qiita.com/hakatashi/items/f9d9abf05a002b5c4dc5

また以下のAtCoderのサイトにある解説も参考になります

https://atcoder.jp/contests/apg4b/tasks/APG4b_b



・そもそもClang,gccとは何か

https://c-lang.sevendays-study.com/column-19.html

https://qiita.com/chihiro/items/1725f9dbb51942534641

https://zenn.dev/harukaeru/articles/08157dd73380d5

https://zenn.dev/okuoku/scraps/0972eb3ab7b49b

・`<bits/stdc++.h>`に関する関連記事

https://qiita.com/bluebery1001/items/eee8bac43df3c4203d86

https://qiita.com/TumoiYorozu/items/e645ccf7c35e56b0eca2