初心者がVScodeで競プロ（C++）の環境構築をしようとして苦戦したところ <Mac>

## 目次

[1.前書き](#1-前書き)
[2.参考にした記事](#2-参考にした記事)
[3.gccって何](#3-gccって何)
[4.パスが通せない](#4-パスが通せない)
[5.使い方わからん](#5-使い方わからん)
[6.まとめ](#6-まとめ)


#1. 前書き
こんにちは。AtCoder歴3日の柑橘です。

競プロを始めるにあたり、とりあえず最初は適当なエディタで書いてAtCoderにコピペして確認して…ってやっていたのですが、手元で動作確認したくて環境を整えることにしました。

でも脳死でVScodeにコードを突っ込んでも `#include <bits/stdc++.h>` のところにバグが表示されるし、そもそもどこに入力すれば受け取ってくれるのかわからないし…。

それが意外に曲者で、初心者すぎて「…？」となったのでつまづいたところと解決策を備忘録を兼ねて残しておきます。ということで相当初心者目線な記事になりますことをご承知おきください。

#2. 参考にした記事

以下、参考にさせていただいた記事です。
1. https://qiita.com/EngTks/items/ffa2a7b4d264e7a052c6
2. https://note.com/eusoff/n/n8f7ab522f1fa 

主な流れは１に沿っています。１をやっていてわからなかったことを適宜調べたりまとめたりした感じです。


#3. gccって何

**Clang…?gcc…?**
どっち、以前にどちら様…？

調べたところ、コンパイラという子たちらしいです。プログラミング言語で書かれたものをコンピュータにわかるように変換（=compile）するものです。
コンパイラにも色々あって、AtCoderで使われるC++のコンパイラが上の二つ。

違いは私にはわかりませんが、AtCoderの初心者コースで解説されている `#include <bits/stdc++.h>` をそのまま使うには **gcc** を入れないといけないみたい…。でもMacの標準搭載はClangなので、それを変えてあげないといけません。それが環境構築が大変だった理由です。

homebrewは元々Macに入っていたので早速gccをインストール。（多分世の中にhomebrewのインストール周りの記事がたくさんあるのでhomebrewで詰まった方はそちらをご参照ください）

```terminal:Terminal
$ brew install gcc
```

…エラー。
（最初気づかなくて、入ってるはずなのにない！！ってとてもテンパりました。）

```terminal:Terminal
Error: gcc: the bottle needs the Apple Command Line Tools to be installed.
  You can install them, if desired, with:
    xcode-select --install
```

よくわからないけれど、**xcode-select** なるものをインストールしないといけないみたい。言われるがままにインストール。

出てきたウィンドウで同意するを押すとインストールが始まるのですが、最初残り7時間みたいに出てきてとても焦りました。しばらく待っていたら35分とかにすっ飛んで行ったので同じようになった方はちょっと待ってみてください。

今度こそ行け！

```terminal:Terminal
$ brew install gcc
```

お、行けたみたいです。


#4. パスが通せない

上でgccはMacにインストールできましたが、今Macには元々入っているClangと今入れたgccが両方ある状態で、どっちを使うか指定しないといけません。

何もせずC++を使おうとすると標準搭載のClangになってしまい、gccにするには毎回細かく指定しなくてはならないのでそれを今から変えます。
（これが「PATHを通す」ということだとざっくり理解したのですが、合っていますでしょうか？）

（PATHについてはこちらの記事がわかりやすかったです↓
https://qiita.com/sta/items/63e1048025d1830d12fd）

Clang、gccはそれぞれ以下のファイルにあります。

* /usr/bin/g++ (clang)
* /usr/local/bin/g++-9 (gcc)

参考にした記事1（再掲：https://qiita.com/EngTks/items/ffa2a7b4d264e7a052c6 ）の通りにコマンドを打ったのですが、なぜか上の方が呼び出されてしまいます…。

いろいろと試したのですが、参考にした記事2（再掲：https://note.com/eusoff/n/n8f7ab522f1fa ）にあった

```terminal:Terminal
$ brew install gcc@9
```

をしたところできました。@後ろの数字がgccのバージョンなので、そのあたりの問題だったのかなと推測。ちなみにg++-9がちゃんと入っているかは

```terminal:Terminal
$ ls /usr/local/bin/
```
で確認できます。バーっとここに入ってるファイル名が出てくるのでその中にg++-9があればOKです。


```terminal:Terminal
$ ln -s /usr/local/bin/g++-9 /usr/local/bin/g++
```

ここで上記のコードを打ち込むとパスが通りました！

※この時、`Permission denied`と表示されてしまう方は https://mtgate2020.com/aikiritan-perimissiondenied/ などを参照してみてください。

#5. 使い方わからん
VScodeに拡張機能を入れる、`#include <bits/stdc++.h>`を使えるようにするなどの過程は参考にした記事1（再々掲：https://qiita.com/EngTks/items/ffa2a7b4d264e7a052c6 ）をご参照ください。これらは設定できたとして、やっとこれでできる！と思ったら使い方がわからない。初心者あるあるです。

VScodeの使い方はなどはたくさん記事があるので割愛して、

**どうやって実行するんだ！？**

がわからなかったのでそこをまとめておきます。
まず、適当なフォルダを作ったら新規ファイルの名前を
`おなまえ.cc`
で作成します。（C++アイコンになればOK）
**表示→ターミナル**　（もしくはctrl+shift+Pの右隣のキー=@,`のやつ）
で、ターミナルを表示します。
![スクリーンショット 2021-09-19 0.38.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148020/486bf574-744d-4c1d-4d1f-0aabbdcccdb1.png)

ターミナルには、Macのターミナルと同じものが表示されています。プログラムに対する入力をするには、このプログラムを実行します。


右上の三角ボタンを押す（またはctrl+option+n）と実行できます。
この時、⌘+Sでセーブしていないと反映されません。サンプルとして以下のようなスクリプトを実行してみます。

```terminal:ex1
#include <bits/stdc++.h>
using namespace std;

int main()
{
  string t;
  cin >> t;
  cout << t << "World!" << endl;
}
```


実行し、

```terminal:input
Hello,
```
と入力してEnterを押すと、

```terminal:output
Hello,World!
```
が得られました。
実際の画面は以下のような感じです。
![スクリーンショット 2021-09-19 0.48.29.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148020/7b9260bd-d59f-c8f4-0370-d66f534696aa.jpeg)

これで動作確認することができました！やった！！！！

#6. まとめ

地味に時間かかったけどまとめるの定期的にやっていきたいです！結構勉強になります。（まとまってない）
以上、柑橘でした。