mainの構造
雛形の 3 つの部品
ここまで 2 回、同じ枠を使ってきました。今回はその枠を分解します。もう一度、全体を見てください。
#include <stdio.h>
int main(void) {
printf("成績管理システム\n");
return 0;
}部品は #include <stdio.h> と int main(void) と return 0; の 3 つです。ひとつずつ、何のために必要なのかを見ていきます。
#include は道具箱を持ってくる合図
C 言語の本体には、printf という命令は入っていません。printf は標準ライブラリという「あらかじめ用意された道具の詰め合わせ」の中にあります。#include <stdio.h> は、そのうち入出力に関する道具の一覧をこのファイルに読み込む指示です。stdio は standard input output の略で、.h はヘッダファイルという意味です。
この 1 行を消すと、コンパイラは printf という名前を知らないまま翻訳を始めることになり、警告やエラーを出します。使う道具の宣言を先に読み込ませる、と覚えてください。文の終わりですがセミコロンは付きません。# で始まる行は普通の文とは別扱いだからです。
main は実行の入口
int main(void) から始まる { と } のあいだが、プログラムが動き出す場所です。実行ファイルを起動すると、OS はまず main を探して、その中身を上から順に実行します。名前が main である必要があり、start や run では動きません。
(void) は「この関数は引数を受け取りません」という意味です。丸カッコを空にしても多くの環境で動きますが、受け取らないことをはっきり書く (void) のほうが C では丁寧な書き方とされています。
中身の行は、必ず上から順に 1 行ずつ実行されます。printf を 3 つ並べれば、書いた順に 3 行出ます。
return 0 は終わり方の報告
先頭の int は「main は整数を返す」という宣言です。誰に返すのかというと、プログラムを起動した OS に返します。慣習として、0 は正常終了、0 以外は何か問題があって終わった、という意味を持ちます。
return 0; /* 正常に終わりましたと伝える */return が実行された時点で main は終わります。ですから return 0; より下に printf を書いても、その行は実行されません。これは第 5 章で関数を学ぶときに、もう一度重要になります。
この 3 つの部品は、これから 60 回以上ずっと付き合う枠組みです。今は丸暗記ではなく、「道具を読み込む」「ここから始まる」「ここで終わりを報告する」という役割で覚えてください。
要件
- 1行目は include が入出力の道具を読み込む と表示する
- 2行目は main から実行が始まる と表示する
- 3行目は return 0 で正常終了を伝える と表示する
- main の最後に return 0; を書く
入出力例
main("") → "include が入出力の道具を読み込む
main から実行が始まる
return 0 で正常終了を伝える"