3.1 Hello, traP!の解説
3.1.1 全体像
まずは、第2章の最後に登場したプログラムをおさらいしよう。
1行目から順に、まずは「用語」を説明していく。 新しい単語がどんどん出てくるが、単語の説明は3.1.2以降で行う。今は単語を頭の片隅に入れておくレベルで良いだろう。
#include <iostream>
using namespace std;
int main() {
cout << "Hello, traP!" << endl;
// Hello, traP を出力する
}iostreamと呼ばれるファイルを「インクルード」している。
#include <iostream>
using namespace std;
int main() {
cout << "Hello, traP!" << endl;
// Hello, traP を出力する
}std::を省略できるようにする。
#include <iostream>
using namespace std;
int main() {
cout << "Hello, traP!" << endl;
// Hello, traP を出力する
}mainという名前の「関数」を定義している。プログラムはここから実行される。
#include <iostream>
using namespace std;
int main() {
cout << "Hello, traP!" << endl;
// Hello, traP を出力する
}コンソールにHello, traP!を「出力」する。
"で囲うのは、これが文字列なのか、命令なのかを区別するため。(VSCodeを使っていれば"Hello, traP!"の部分だけ色分けされているはず。)
endlについては3.1.3で解説する。
#include <iostream>
using namespace std;
int main() {
cout << "Hello, traP!" << endl;
// Hello, traP を出力する
}「コメント」を書いている。
#include <iostream>
using namespace std;
int main() {
cout << "Hello, traP!" << endl;
// Hello, traP を出力する
}波括弧を閉じている。
3.1.2 コメント
#include <iostream>
using namespace std;
int main() {
cout << "Hello, traP!" << endl;
// Hello, traP を出力する
}//と書くと、その行の//以降の部分はコメントとなる。すなわち、プログラム実行時には無視され、無いものとして扱われる。
TIP
プログラムの先頭に//を付けてコメントにする事をコメントアウトする、と呼ぶことがある。
プログラムがどのような動作をするのか、どういう目的のプログラムなのか、を簡潔に記述すると良い。見たら分かるというレベルになれば、コメントを書く必要はない。
3.1.3 cout
#include <iostream>
using namespace std;
int main() {
cout << "Hello, traP!" << endl;
// Hello, traP を出力する
}coutは値を出力するための仕組みである。<<を使って値を渡すと、その値が文字として画面に表示される。文字列を出力するときは、命令と区別するため、"で文字列を囲むようにする。
このプログラムを実行すると、ターミナルに次のように出力される。
Hello, traP!(Code Runnerを使ってプログラムを実行すると、他にもいろいろなものが表示されるかもしれないが、今は気にしなくて良い。)
<<は、複数つなげることもできる。例えば、以下のように書いても出力は変わらない。
cout << "Hello, " << "traP!" << endl;endlと書くと、出力は改行される。例えば、プログラムを次のように書き換えてみる。
cout << "Hello, " << endl << "traP!" << endl;すると、出力は次のように変わる。
Hello,
traP!エスケープシーケンス
出力に"を含めたい場合、cout << "Hello, "traP"!" << endl;と記述してもコンパイルができない。これは"Hello, "で文字列が区切られてしまっているためである。 これを回避するために、\という文字を使って\"と書くことで、"を出力することができる。
このように\を使った文字の出力の仕方をエスケープシーケンスと呼ぶ。
\は、Windowsであれば¥キーを押すことで、MacであればOption(⌥)キーを押しながら¥キーを押すことで入力できる。
cout << "Hello, \"traP\"!" << endl; // 「Hello, "traP"!」と出力される他にもHello, \ntraP!のように文字列中に\nと書くと改行ができる。
cout << "Hello, \ntraP!" << endl;この場合はHello, とtraP!の間に改行が入り、出力は以下のようになる。
Hello,
traP!また、\を文字列内で使いたい場合は、\\と書く。文字列中では、//と書いてもコメントアウトされない。
cout << "\\\\ Hello, traP!! //" << endl; // 「\\ Hello, traP!! //」と出力される3.1.4 セミコロン
C++では、;(セミコロン)を多用する。;は「命令の区切り」を示す。C++においては、関数を呼び出すときや、「変数」の定義時など、各命令の終わりには;を記述しなければならない。
TIP
最終的にはコンピューターが機械語に変換する必要があり、その際に命令の区切りをはっきりさせるために;を使うと考えると良い。
3.1.5 include命令
#include <iostream>
using namespace std;
int main() {
cout << "Hello, traP!" << endl;
// Hello, traP を出力する
}#includeは、外部の関数(やその他もろもろ)が実装されているファイルを取り込んで、使えるようにする命令である。
このプログラムではiostreamと呼ばれるファイルをインクルードしている。これは入出力に関する便利な関数(など)が用意されているファイルである。例えば、coutはiostreamに含まれているものの一つである。
自分一人で一から作る事は非常に難しいので、予め用意されたプログラムを適宜用いてプログラミングをするのである。
3.1.6 using namespace std
#include <iostream>
using namespace std;
int main() {
cout << "Hello, traP!" << endl;
// Hello, traP を出力する
}これまで出力をcoutと記述してきたが、これは本来ならばstd::coutと書く必要がある。(std::が何を意味しているかは深くは解説しないがstdがstandardの略であることくらいは知っておいても良いだろう。)毎回std::と書かなければいけないのは少し不便なので、これを書かない(省略する)という宣言をしている。
3.1.7 main関数
#include <iostream>
using namespace std;
int main() {
cout << "Hello, traP!" << endl;
// Hello, traP を出力する
}プログラムは実行されるとき、このmain関数から実行が始まる。すなわち、main関数の中身がプログラムの最も主な処理であると捉えても良い。「関数」についての詳細は第7章で扱う。
したがって、main関数はプログラム中にただ1つ存在していなければならない。main関数が無かったり、複数個存在していたりしてはいけない。
プログラムの中でint main()の後の{と、最終行の}は対応していて、{}の内側がmain関数の内容である。今のところは、「main関数の{と}の間に処理を書く」と思っていれば十分である。
3.1.8 インデント
プログラムが長くなってくると、{}が何個も入れ子になって出てくるようになる。そこで、{が1つ始まるごとに、インデント(字下げ)を行う。すなわち、各行の最初に空白を入れる。
以下は、第4章で学ぶif文を用いたプログラムである。今はまだ意味を理解する必要はないが、{が始まるごとに行頭の半角スペースが2つずつ増えていることがわかるだろう。VSCodeなどのエディタであれば、こうした作業はある程度自動で行ってくれる。
#include <iostream>
using namespace std;
int main() {
cout << "点数を入力してください。" << endl;
int score = 0;
cin >> score;
if (score >= 60) {
cout << "合格です。" << endl;
}
if (score < 60) {
cout << "不合格です。" << endl;
}
}