
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;
}このプログラムの実行結果は、次のようになります。
概要処理を実行しています
詳細処理を実行しています処理の流れを順番に追ってみる
このプログラムは、
次の順番で処理が進みます。
- main関数が実行される
- showSummary関数が呼び出される
- showSummaryの処理が始まる
- showDetail関数が呼び出される
- showDetailの処理が実行される
- showDetailが終了し、showSummaryに戻る
- showSummaryが終了し、mainに戻る
このように、
関数の呼び出しは階段状に積み重なっていく
イメージを持つと分かりやすいです。
関数呼び出しは「処理を委任する」こと
関数から関数を呼び出すというのは、
- 自分の仕事の一部を
- 別の関数に任せる
ということです。
showSummary関数は、
- 全体の流れを管理する
- 詳細処理は showDetail に任せる
という役割分担をしています。
小さな関数を組み合わせるメリット
このように関数を分けると、
次のような良いことがあります。
| メリット | 内容 |
|---|---|
| 見通しがよい | 1つの関数がやることが明確になる。 |
| 再利用しやすい | 同じ処理を別の場所から呼べる。 |
| 修正が楽 | 問題のある関数だけ直せばよい。 |
大きな処理を、
いきなり1つの関数で書こうとしないこと。
これが、
読みやすいプログラムを書くコツ です。
関数の定義順にも注意しよう
ここで、1つ大事なルールを思い出しましょう。
関数は、定義より下のコードからしか呼び出せません。
先ほどの例では、
- showDetail を先に定義
- showSummary から呼び出す
という順番になっていましたね。
もし順番を逆にすると、
コンパイルエラーになります。
この点については、
後の節で「関数宣言」という仕組みを使って
解決できるようになりますので、
今は「順番が大事」と覚えておけば十分です。
関数どうしの関係を考える
関数呼び出しを理解するときは、
次のように考えてみてください。
- main関数は全体のスタート地点
- 関数Aは処理のまとめ役
- 関数Bは細かい作業担当
処理が進むにつれて、
main → 関数A → 関数B
と深く入り、
処理が終わると逆向きに戻ってきます。
まとめ:関数はチームで働く
この節のポイントを整理しましょう。
- 関数は main関数以外からも呼び出せる。
- 関数から関数を呼び出す書き方は同じ。
- 処理は呼び出し元に必ず戻る。
- 小さな関数を組み合わせると、プログラムが整理される。
関数は、
1人で全部を抱え込むものではありません。
役割ごとに分担し、
協力し合って動くことで、
プログラムはどんどん読みやすくなります。
次は、
プロトタイプ宣言を定義する方法
に進んでいきましょう 😊
