こんにちは。初投稿です。はてなブログに書いていたのですが、参考がQiitaばっかりだったので、こういう記事はQiitaにも書いてみようかなと思い、コピーしてみました。
元記事→こちら
競プロではC++が強いそうですね。
C++ではインクルードファイルとして
#include <iostream> //入出力
#include <string> //文字列
#include <vector> //配列
...
等々書くそうですが、面倒なのでAtCoderでは<bits/stdc++.h>
を使うと良い、という話になっています。
B - 1.01.出力とコメント
これは、gccに付属する、諸々のインクルードファイルを一気に読み込むためのファイルだそうです。つまり
#include <bits/stdc++.h>
とかけば済むということです。
しかし、macでは使えないそうです(参考文献参照)。
これを、makefileを活用して楽に使えるようにしてみました。
ファイル構造
abc150/a.cpp
をコンパイルしてみたいと思います。
@AtCoder
|
|-- abc150
| |-- a.cpp
|
|-- bits
| |-- stdc++.h
|
|-- makefile
#include <bits/stdc++.h>
using namespace std;
int main(){
int K, X;
cin >> K >> X;
if(K*500>=X){
cout << "Yes\n";
}else{
cout << "No\n";
}
return 0;
}
%: %.cpp
c++ -I .../@AtCoder $< -o $@
# パスは各自で書き換えてください
ちなみに上のa.cppはA - 500 Yen CoinsにACで通過します(それはそう)。
コンパイルしてみる
- 環境
macOS Mojave バージョン10.14.6
Visual Studio Code バージョン1.44.2
(環境について何をかけば良いのかあんまりわかってないので不十分かも。ごめんなさい)
普通にコンパイルすると
$ cd .../@AtCoder
$ c++ abc150/a.cpp
↓
abc150/a.cpp:1:10: fatal error: 'bits/stdc++.h' file not found
#include <bits/stdc++.h>
^~~~~~~~~~~~~~~
1 error generated.
怒られた。元々のインクルードパスにbits/stdc++.hが無いですよ、ということ。
bits/stdc++.hの準備
ここ↓にあります
これをコピペして@AtCoder/bits/stdc++.h
に保存します。(行番号もコピーしてしまうので頑張って消した)
参考文献にあるように、コンパイル時にインクルードパスを指定してコンパイルすれば良いので
$ c++ -I /Users/.../@AtCoder abc150/a.cpp
これで一応はコンパイルできます。
簡単にする
毎回インクルードパスを書くのは面倒なのでmakefileを作ってそこに書いておきましょう。
ということで、冒頭にも置きましたが
# .../@AtCoder/makefile
%: %.cpp
c++ -I /Users/.../@AtCoder $< -o $@
これだけ。ちなみに2行目の頭の空白は、スペースではなく「タブ」でなくてはいけません。
それでもって
$ cd .../@AtCoder
$ make abc150/a
でコンパイル(拡張子.cpp
をつけないことに注意)。実行は
$ abc150/a
です。
おまけ-Cのファイルとの共存
もともとabc150/a.c
があった場合、今まではmake abc150/a
でコンパイルできたのが、makefileの変更によってmake abc150/a
ではc++のファイルがコンパイルされてしまいます。
makefileを改良して
%pp: %pp.cpp
c++ -I /Users/.../@AtCoder $< -o $@
とし、c++のファイルはapp.cpp
, bpp.cpp
のようにファイル名の方にもpp
をつけてやるとa.c
, b.c
との共存(?)が図れます。
まあ、cをコンパイルするときは先に移動しておけば良いんですけどね
$ cd abc150
$ make a (a.cコンパイル)
$ ./a (実行)
参考文献
- [C++の標準ライブラリを一行で一括でインクルードする - Qiita]
(https://qiita.com/berlysia/items/6368ebe5d033e3ace43b) - [C言語を使うならMakeを使おうよ - Qiita]
(https://qiita.com/j8takagi/items/74232a00cc33623f7844) - [C言語におけるinclude文とgcc -Iオプションの関係 - Qiita]
(https://qiita.com/DQNEO/items/4e5c2eca2761ec08b922)