C言語学習ポータル(無料版) 学習コンテンツ 関数とスコープ 関数とは——処理に名前を付ける

🧩 関数とスコープ

関数とは——処理に名前を付ける

無料公開版に収録・読む目安 10分

🎯 関数の役割と基本の書き方が分かり、自分で作った関数を呼び出せる

朝の支度を人に説明するとき、「歯ブラシを取って、水を出して、みがいて、口をすすいで……」と毎回すべてを言う人はいません。ふつうは「歯をみがく」の一言で済ませます。手順のかたまりに名前を付けたからです。

プログラムでも同じことをします。処理のかたまりに名前を付けて、いつでも呼び出せる部品にしたもの。それが関数です。ここまで毎回書いてきた main も、実は関数のひとつでした。

基本の形

戻り値の型 関数名(引数リスト)
{
    処理;
}

いちばん簡単なのは、値を受け取らず、値も返さない関数です。

#include <stdio.h>

// 区切り線を表示するだけの関数
void print_line(void)
{
    printf("--------------------\n");
}

int main(void)
{
    print_line();
    printf("  本日の売上\n");
    print_line();
    return 0;
}

実行すると、区切り線・見出し・区切り線の3行が表示されます。print_line(); と書いた場所でいったん関数の中身に飛び、終わったら元の場所に戻ってくる。これが呼び出しです。

実行の順番に注意

「ソースコードは上から下へ実行される」という思い込みは、ここで一度捨ててください。print_line の中身はファイルの上のほうに書かれていますが、それが動くのは main の中で呼ばれた瞬間です。定義は「置いてあるだけ」で、呼ばれるまで一度も実行されません。プログラムの実行はいつも main から始まり、呼び出しのたびに行ったり来たりします。

なぜ部品にするのか

理由は3つあります。ひとつめ、同じ処理を何度も書かずに済むこと。ふたつめ、print_line という名前そのものが説明になり、main を上から読むだけで流れが分かること。みっつめ、直すときに1か所だけ直せばよいこと。区切り線を - から = に変えたくなっても、関数の中の1行を書き換えるだけで、呼び出しているすべての場所に反映されます。

名前の付け方にもコツがあります。関数は「何かをする」ものなので、print_line count_words のように動詞から始めると、読んだ瞬間に役割が伝わります。

罠・注意

void が2か所に出てきますが、意味は別々です。前の void は「返す値はない」、カッコの中の void は「受け取る値はない」。C23では print_line() と空カッコにしても「引数なし」の意味になりますが、意図がはっきりする (void) を書いておくのが無難です。

ビット同じ処理を2回以上書きそうになったら、関数にするサインだよ

まとめ: 関数は「名前の付いた処理のかたまり」。作って、呼ぶ。たったこれだけで、長いプログラムが読める大きさに分かれていきます。

要点まとめ

アプリで演習問題まで解く(無料・登録不要)

この項目に出てくる用語

関数かんすう

一連の処理に名前を付けてひとまとめにしたもののこと。同じ処理を何度も書かずに、名前を呼ぶだけで再利用できる部品にあたる。printfやscanfも、標準ライブラリがあらかじめ用意してくれている関数の一種。

同じトラックのほかの項目

引数と戻り値引数で値を受け取り、returnで結果を返す関数を書ける プロトタイプ宣言プロトタイプ宣言の役割を理解し、関数を好きな順番で書けるようになる 変数のスコープ——見える範囲ブロックごとのスコープを理解し、変数がどこから見えるか判断できる 変数の寿命とstatic自動変数とstatic変数の寿命の違いを説明でき、使い分けられる コールスタック——関数呼び出しの舞台裏関数呼び出しでスタックフレームが積まれ、戻るときに降ろされる流れを説明できる 値渡しの本質引数はコピーが渡ることを理解し、関数内の変更が呼び出し元に届かない理由を説明できる グローバル変数との付き合い方グローバル変数の性質と危険を理解し、使いどころを判断できる 関数分割の設計センス1関数1仕事の原則で、長い処理を読みやすい関数に分けられる 再帰の入口——自分を呼ぶ関数再帰の2要素(停止条件と縮小)を理解し、階乗を再帰で書ける
引数と戻り値 ›

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

完全版(BOOTH)を見る

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

Web版 / BOOTH