トラック4・🚪はじめてのC

main関数と#include

読む目安 約10分・ゴール: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 $? で、直前のプログラムが返した値を確認できます。

師範終了コードは、プログラムがこの世に残す最後のひとことじゃ。0は「無事に済んだ」、それ以外は「事情あり」。呼んだ側はこれで次の行動を決めるのじゃ。

#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 はヘッダファイルを貼り付けて、関数の使い方をコンパイラに教える指示です。

アプリでこのトピックを学ぶ(無料・登録不要)

確認問題

確認問題 1

#include <stdio.h> は何をしている行ですか。

  1. stdio.h という名前のプログラムを実行する
  2. printf などの使い方が書かれたヘッダファイルを取り込む
  3. 画面を初期化して真っ白にする
  4. キーボードからの入力を待つ
答えを見る

正解:B(printf などの使い方が書かれたヘッダファイルを取り込む)

#include は指定したヘッダファイルの中身をその場に貼り付ける指示です。stdio.h には printf や scanf の「こういう形で使う」という宣言が書かれていて、これをコンパイラに教えるために取り込みます。行末にセミコロンは付けません。

確認問題 2

コンパイルすると fatal error: studio.h: No such file or directory と出ました。バグのある行はどれですか。

1#include <studio.h>
2
3int main(void) {
4    printf("こんにちは\n");
5    return 0;
6}
答えを見る

バグのある行:1行目

1行目の綴りが違います。正しくは #include <stdio.h>(standard input/output header)で、studio ではありません。No such file or directory は「そんなファイルは見つからない」という意味なので、ファイル名の綴りをまず疑います。

エラーメッセージは「ファイル名:行:桁: 種類: 内容」の順に読みます。今回は取り込もうとしたヘッダが見つからない、という報告です。stdio と studio は目で追うと見落としやすい定番の綴り間違いです。

「はじめてのC」の目次

  1. 開発環境ゼロで始める——このポータルの使い方
  2. Hello, World! を解剖する
  3. main関数と#include
  4. コンパイルエラーと友達になる
  5. printfで画面に出す——書式指定の基本
  6. scanfで入力を受け取る
  7. scanfの罠——入力の恐怖を越える
  8. コメントとコードの整え方

もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。

完全版の販売ページは準備中です。

ほかのトラック

📚 姉妹教材:手を動かして覚える Linux 教材 — Linuxとインフラの仕組みを地図で学ぶ

Web版