C言語入門|関数から関数を呼び出す

前の記事では、
main関数から関数を呼び出す方法を学びましたね。

ここで、こんな疑問が浮かんだ人もいるかもしれません。

「関数って、main関数からしか呼べないの?」

答えは―
いいえ、そんなことはありません。

C言語では、
関数は関数からも呼び出せます。

この節では、
関数どうしが連携して動く仕組み を見ていきましょう。

関数は main だけの専用部下ではない

これまでの説明では、

  • main関数が上司
  • そのほかの関数が部下

というイメージで話をしてきました。

でも実際には、
部下どうしが協力して仕事を進める場面も、
たくさんありますよね。

プログラムでも同じです。

  • main関数が関数Aを呼ぶ
  • 関数Aが関数Bを呼ぶ
  • 関数Bが処理を終えて戻る

という流れは、ごく普通に使われます。

関数から関数を呼び出す基本形

関数から関数を呼び出す場合でも、
書き方は変わりません。

呼び出したい関数名();

これは、
main関数の中で呼び出す場合と
まったく同じ構文 です。

「どこから呼ぶか」
が違うだけで、
「どう書くか」は同じなのです。

シンプルな例で動きを見てみよう

では、実際のコードで確認してみましょう。
次のプログラムでは、
関数Aが関数Bを呼び出しています。

プロジェクト名:8-4-1 ソースファイル名: sample8-4-1.c

#include <stdio.h>

void showDetail(void)
{
    printf("詳細処理を実行しています\n");
}

void showSummary(void)
{
    printf("概要処理を実行しています\n");
    showDetail();   // showDetail関数を呼び出す
}

int main(void)
{
    showSummary();  // showSummary関数を呼び出す
    return 0;
}

このプログラムの実行結果は、次のようになります。

概要処理を実行しています
詳細処理を実行しています

処理の流れを順番に追ってみる

このプログラムは、
次の順番で処理が進みます。

  1. main関数が実行される
  2. showSummary関数が呼び出される
  3. showSummaryの処理が始まる
  4. showDetail関数が呼び出される
  5. showDetailの処理が実行される
  6. showDetailが終了し、showSummaryに戻る
  7. showSummaryが終了し、mainに戻る

このように、
関数の呼び出しは階段状に積み重なっていく
イメージを持つと分かりやすいです。

関数呼び出しは「処理を委任する」こと

関数から関数を呼び出すというのは、

  • 自分の仕事の一部を
  • 別の関数に任せる

ということです。

showSummary関数は、

  • 全体の流れを管理する
  • 詳細処理は showDetail に任せる

という役割分担をしています。

小さな関数を組み合わせるメリット

このように関数を分けると、
次のような良いことがあります。

メリット内容
見通しがよい1つの関数がやることが明確になる。
再利用しやすい同じ処理を別の場所から呼べる。
修正が楽問題のある関数だけ直せばよい。

大きな処理を、
いきなり1つの関数で書こうとしないこと。

これが、
読みやすいプログラムを書くコツ です。

関数の定義順にも注意しよう

ここで、1つ大事なルールを思い出しましょう。

関数は、定義より下のコードからしか呼び出せません。

先ほどの例では、

  • showDetail を先に定義
  • showSummary から呼び出す

という順番になっていましたね。

もし順番を逆にすると、
コンパイルエラーになります。

この点については、
後の節で「関数宣言」という仕組みを使って
解決できるようになりますので、
今は「順番が大事」と覚えておけば十分です。

関数どうしの関係を考える

関数呼び出しを理解するときは、
次のように考えてみてください。

  • main関数は全体のスタート地点
  • 関数Aは処理のまとめ役
  • 関数Bは細かい作業担当

処理が進むにつれて、

main → 関数A → 関数B

と深く入り、
処理が終わると逆向きに戻ってきます。

まとめ:関数はチームで働く

この節のポイントを整理しましょう。

  • 関数は main関数以外からも呼び出せる。
  • 関数から関数を呼び出す書き方は同じ。
  • 処理は呼び出し元に必ず戻る。
  • 小さな関数を組み合わせると、プログラムが整理される。

関数は、
1人で全部を抱え込むものではありません。

役割ごとに分担し、
協力し合って動くことで、
プログラムはどんどん読みやすくなります。

次は、
プロトタイプ宣言を定義する方法
に進んでいきましょう 😊