これが真の競技プログラミング用C++環境構築だ！！！

# はじめに
本記事は競技プログラミングを始めたばかりの私がC++での参戦のために環境構築をする話です。
**同じような記事はいくつかありましたが、私なりにわかりやすく解説しているので許してください。**

# 目次
- 競技プログラミングしよう！！！
- C++で始めたいけど...環境...
- MinGWのインストール
- VisualStudioCodeのインストールと基本設定
- デフォルトのコンパイルはもどかしいっ
- バッチファイルでコンパイルと実行を簡単に行えるようにしよう！
- 終わりに
- 参考

# 競技プログラミングしよう！！！
競技プログラミングは、名の通りプログラミングの精度と速さで他のプレイヤーと戦ったり、自身のプログラミング力を鍛えることのできるシステムです。毎週のように制限時間を設けた大会が開かれており、どんな人でもチャレンジすることができます。難易度別で多くのテストがあるため、始めたての人から熟練者まで楽しめるつくりになっています。
また、言語についても多くをサポートしているため、相当ニッチな言語でない限りは大丈夫ではないでしょうか。

競技プログラミングの代表的なサイト
[AtCoder](https://atcoder.jp/?lang=ja)

# C++ではじめたいけど...環境...
競技プログラミングではどうやらC++でやるのがいいらしい(実行時間の関係？)と小耳にはさんだ私は早速C++で競技プログラミングをはじめようとしました。
しかし、VisualStudioCommunityぐらいしか僕のPCにはC++の動く環境はなかったので微妙なところです。プロダクト作るわけでもないのにVisualStudioCommunity立ち上げるのはちょっと...。
なのでcmdから動作させることのできるC++動作環境を構築してVisualStudioCodeから動かせるように目論見ました。
なので、ここからはC++で始めたい人向けになるとおもいます。
**あと、私はWindows10ユーザなので、バージョン違う人やOS違う人はもしかしたら役に立たないかも...**

# MinGWのインストール

[まずはこちらのサイトを開きましょう。](https://osdn.net/projects/mingw/downloads/68260/mingw-get-setup.exe/)
すると、もうダウンロードされるので起動します。

起動が終わったらインストール画面に移るので以下の手順で正確な設定を選んでインストールします。

- まず画面が出たら"install"を選ぶ。
- 次の画面に移ったら特に何も変えず"continue"
- 100％になったらインストール完了。
- デスクトップにMinGWマネージャのショートカットが作成され、起動するはず...
- 起動したら以下の二つを探して選択し、"Mark for Installation"を選ぶ
    - mingw32-base-bin
    - mingw32-gcc-g++-bin
- 選択できたらリボンの"Installation"から"Apply Change"を選択する。
- 100%インストールでき、機能の確認ができたらcloseする。

これでC++コンパイル用のgcc準備できました。

## 環境変数の設定

続いて、cmdからコマンド実行できるようにパスの設定をします。

- スタートの検索に"環境変数を編集"と入力し、一番上に出てきたものを選びます。
- すると小ウィンドウが出てくるため、"環境変数"のボタンを選択します。
- すると今度はまた小ウィンドウが出てきて様々な設定やらの画面が見られるかと思います。
- 〇〇のユーザ環境変数(〇〇はユーザ名)とある上の一覧からPathを選択します。
- するといくつかのパスが出てくると思うので、`C:\MinGW\bin`を追加します。

これでcmd上からgccコマンドが使えるようになったかと思います。
試しにcmdを起動して。`gcc -v`を入力してみてください。バージョン情報が見れるはずです。

# VisualStudioCodeのインストールと基本設定

[公式サイト](https://code.visualstudio.com/)に移動してまずはインストールしましょう。
インストールの流れと日本語対応までは[こちらのサイト](https://breezegroup.co.jp/201904/visualstudiocode/#VSCode-2)でやってくれています。

準備ができたら、今度は拡張機能を追加します。

- リボンから「ファイル>基本設定>拡張機能」と進みます。
- 入力部分C/C++を入力すると以下の拡張機能が出てくると思うので、インストールしましょう。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405090/d14165c5-a41d-b268-dca2-82cc4c652bde.png)


ザックリではありますが、これでC/C++のコードを書く準備は整いました。

# デフォルトのコンパイルはもどかしいっ
では早速、コードを書いてみましょう。

適当にデスクトップ上にでもディレクトリを作って、VisualStudioCodeで開いた後、test.cppファイルを作って以下を入力してください。

```c++:test.cpp

#include <iostream>
using namespace std;

int main(){
  printf("test!");
  return 0;
}
```
続いてVisualStudioCodeでターミナルを開き、以下を実行します。
` gcc -o test test.cpp`
これによりコンパイルされ、実行できるtest.exeファイルが作成されるはずです。
続いて`test`コマンドで実行します。
"test!"と表示されれば成功です。

**ですが面倒くさいですよね？一発で実行までしたい...。**


# バッチファイルでコンパイルと実行を簡単に行えるようにしよう
Windowsには便利にも処理の一連を一括で行うことができる便利なバッチファイルなるものが存在します。
そのため、コマンド一発でコンパイルと実行の両方をすることを可能にすることを可能にします。

理論で説明するよりも体感してもらった方が速いと思うので、以下よりその準備をしていくことにしましょう。

## バッチファイルを作る
まずは一つのコマンドで実行までできるように以下のバッチファイルを作成しましょう。

```bat:cce.bat
@echo off

if "%~dpnx1" == "" (
    echo Error!: plz point out 1 cppfile as argument
    goto :eof
)

call g++ -o "%~dpn1".exe "%~dpnx1"

if %errorlevel% neq 0 (
    goto :eof
)

echo ----------System runnning---------------
call "%~dpn1".exe
del "%~dpn1".exe
echo.
```

このバッチファイルを設定すれば`cce <実行したいcppファイル>`でcppファイルを実行することができます。

作成したバッチファイルはCドライブ直下に`CodeRunner`というディレクトリを作成し、この中に保存しておきましょう。

## コードの解説(不要な方は飛ばして大丈夫です。)
- 1行目
`@echo off`により、コマンド実行した際のいらない表示を消しています。

- 3~6行目
`"~dpnx1"`が実行したいcppファイルの絶対パスを表しています。このファイルが「＝""」つまり引き数が与えられていないエラーの際にはこのif分内に入り、`Error!: plz point out 1 cppfile as argument`というエラーを出したうえで`goto :eof`でコマンドの実行を終了します。

- 8行目
`call g++ -o "%~dpn1".exe "%~dpnx1"`ここはなんとなくわかるかもしれませんが先ほど直打ちでやったコンパイルコマンドと同じことをしています。そのため、cppファイルをコンパイルして実行可能なファイルを生成します。

- 10~12行目
`%errorlevel%`は変数なのですが、問題ない場合には0、それ以外の場合には0より大きい数が入ります。これがneq 0 (Not equal 0)だった場合、つまり何かしらのエラーが発生した場合にはgccのほうがエラーを出した後、コマンドを終了させます。

- 14行目
システムの開始がわかりやすいように表示しています。うっとうしいという方はいらないかもしれませんが。

- 15行目
コンパイルして出来上がったexeファイルを実行します。

- 16行目
実行の終わったexeファイルを消します。
私は好きですが、いらない人は消しても大丈夫です。

- 17行目
改行を入れます。
お好みで消してください。

## パスの設定
gccの環境変数設定時と同じようにパスの設定を行います。
先ほどと同じようにpathの設定まで移動し、`C:\CodeRunner`を設定します。

これでcmdで`cce xxx.cpp`でコンパイルから実行までしてくれるはずです。
一度、cmdやVisualStudioCodeを消し、新たにVisualStusioCodeを起動させたうえで先ほど作ったtest.cppのディレクトリを開き、ターミナルから`cce test.cpp`を実行させてみてください。
実行までしてくれれば成功です。

# 終わりに
締めとしては、みんなも競技プログラミング始めようってことですね。
良ければご参考に。

# 参考文献
- [VisualStudioCodeのインストールと日本語化|BREEZE](https://breezegroup.co.jp/201904/visualstudiocode/#VSCode-2)
- [C言語入門 - MinGW - gcc の環境設定（パスを通す） - Windows環境]
(https://webkaru.net/clang/mingw-gcc-environments/)