main は特別な名前です。プログラムがどれだけ大きくなっても、OSが最初に呼ぶのは必ず main。空港でいえば入国ゲートで、旅の出発点はここ1つだけと決まっています。
main関数の形
#include <stdio.h>
int main(void) {
printf("入口はここです\n");
return 0;
}int main(void) を分解します。
・int … main が返す値の型。整数を1つ返します。
・main … 名前。この名前の関数だけが入口になれます。
・(void) … 引数(受け取るもの)は無し、という意味。
・{ } … 中身。ここに書いた処理が上から順に実行されます。
古い教材には void main(void) と書いてあるものがありますが、これは標準に反する書き方です。このポータルでは int main(void) で統一します。
return 0 は誰に返しているのか
返す相手はOSです。0は「正常終了」、0以外は「何か問題があった」という合図。人が画面で見ることは少ないですが、複数のプログラムを自動でつなぐとき(バッチ処理)に使われます。Windowsのコマンドプロンプトなら echo %ERRORLEVEL%、Linux/macOSなら echo $? で、直前のプログラムが返した値を確認できます。
#include は何をしているのか
#include <stdio.h> は、コンパイル前の下ごしらえです。指定したヘッダファイルの中身を、その場に丸ごと貼り付けます。stdio.h には printf や scanf の「使い方の宣言」が書かれています。つまり「printf という関数はこういう形で使いますよ」と、コンパイラに前もって教えるための行です。
書き方は2種類あります。
#include <stdio.h> // < > … コンパイラ付属の標準ヘッダを探す
#include "mycode.h" // " " … まず自分のフォルダを探す動く例——道具が増えると書き方が増える
#include <stdio.h>
int main(void) {
puts("puts は改行付きで1行そのまま出します");
printf("printf は書式を細かく指定できます\n");
return 0;
}puts も stdio.h の道具です。1行そのまま出すだけなら puts のほうが短く書けます(改行は自動で付きます)。
罠・注意
#include の行末にセミコロンは不要。 # で始まる行は普通の文ではありません。付けるとエラーになります。
stdio.h を書き忘れる。 printf が「宣言されていない」という警告やエラーになります。実物は次のトピックで見ます。
main を2つ書かない。 1つのプログラムに入口は1つだけです。
まとめ
実行は必ず main から始まり、return 0; でOSに正常終了を伝えます。正式な形は int main(void) で、void main は使いません。#include はヘッダファイルを貼り付けて、関数の使い方をコンパイラに教える指示です。