コンテンツへスキップ
Topos Uranos

要約

このレッスンでは、C++ の最小のプログラムを部品に分解し、それぞれの役割を説明する。インクルード指令は、プログラムがライブラリのどの部分に依存するかを宣言する。各コンポーネントはそれぞれのヘッダを要求し、それはほかのヘッダが「間接的に」持ち込むことがあっても変わらない。関数 main はエントリポイントであり、その戻り値がシステムの受け取る終了コードである。名前空間 std はライブラリの名前をまとめており、このコースではそれらを必ず接頭辞つきで書く。文はセミコロンで終わり、波括弧は文をブロックにまとめ、コメントはコード自身が語らないことを説明する。レッスンの最後では、このコースがすべてのプログラムで従うスタイルガイドと、std::cout と std::endl を使う他人のコードの読み方を扱う。

学習目標

  1. プログラムの中でインクルード指令、関数 main、文、ブロック、コメントを見分け、それぞれの役割を説明する。
  2. #include が何をするか、そしてライブラリの各コンポーネントがなぜそれぞれのヘッダを要求するのかを、特定のコンパイラではそのヘッダなしでプログラムがコンパイルできる場合も含めて説明する。
  3. 構造の誤り(閉じていない波括弧、欠けたセミコロン、省略されたヘッダ)を含むプログラムを、コンパイラのメッセージを最初のものから読んで修正する。
  4. プログラムをこのコースのスタイルガイドに従って書き直し、各変更の理由を述べる。

最小のプログラム

前のレッスンでは、プログラムを中身を調べずにコンパイルし、実行した。ここではそれを一行ずつ読む。各行がそれぞれ異なる要求に応えているからである。ある行は言語の要求に、ある行はオペレーティングシステムの要求に、ある行はコードを読む人の要求に応えている。そのプログラムは次のとおりである。

C++ のプログラム
// 最初のプログラム:1 行を書いて終了する。#include <print>​int main(){    std::println("こんにちは、世界");}
出力
こんにちは、世界

1 行目はコメントである。二つのスラッシュで始まって行末まで続き、コンパイラはそれを捨てる。プログラムを読む人のために書かれたものである。2 行目はインクルード指令である。コンパイルの前にヘッダ <print> を取り込むよう求めており、標準ライブラリはそこで std::println を宣言している。空行には何の効果もない。プログラムの準備と中身とを分けている。4 行目は関数 main を開く。実行が始まる場所である。5 行目の波括弧はそのブロックを開き、ブロックは最後の行で閉じる。ブロックの中には文が一つだけあり、セミコロンで終わっている。std::println の呼び出しであり、引用符の間のテキストを書き、続いて改行する。

注意すべきは、プログラムには終了のための命令が一つもないことである。main の最後の波括弧に達すると実行は終わり、プログラムはすべてうまくいったことをシステムに伝える。その仕組みは後で見る。したがって、完全なプログラムには五つの部品で足りる。コメント、ディレクティブ、関数 main、ブロック、文である。以下の節ではこれらをこの順に調べるが、コメントだけは文やブロックと一緒に扱う。

例部品を一つずつ

挨拶のプログラムでは、ディレクティブは 2 行目、関数 main は 4 行目から 7 行目まで、そのブロックは 5 行目の波括弧から 7 行目の波括弧まで、唯一の文は 6 行目、唯一のコメントは 1 行目である。コメントを消しても、プログラムは同じようにコンパイルされ、同じ出力を生む。ほかの部品のどれかを消すと、コンパイルできなくなるか、プログラムでなくなる。