🚪 はじめてのC
🎯 mainが実行の入口であること、#includeがヘッダファイルを取り込む指示であることを説明できる
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 はヘッダファイルを貼り付けて、関数の使い方をコンパイラに教える指示です。
一連の処理に名前を付けてひとまとめにしたもののこと。同じ処理を何度も書かずに、名前を呼ぶだけで再利用できる部品にあたる。printfやscanfも、標準ライブラリがあらかじめ用意してくれている関数の一種。
変数に入れられる値の種類と、確保するメモリの大きさを決める分類のこと。箱の形や大きさを決めるルールのようなものだと考えるとよい。int・double・charなど、C言語にはあらかじめ複数の型が用意されている。
関数の宣言など、複数のファイルで共有したい情報をまとめた.hという拡張子のファイルのこと。#includeで取り込んで使う。#include <stdio.h>のstdio.hが、まさにこのヘッダファイルにあたる。
ソースコードを機械語に変換するソフトウェア。文法チェックも同時に行い、間違いがあればコンパイルエラーとして知らせてくれる翻訳者兼校正者にあたる。gccやclangなど、C言語向けのコンパイラにはいくつかの種類がある。
もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。