
C言語入門|戻り値のしくみ
関数、だいぶ使いこなせるようになってきましたね。
引数を使えば、関数の動きを柔軟に変えられることも学びました。
でも、こんなことを思ったことはありませんか?
「関数の中で計算した結果を、
呼び出し元で使えたらもっと便利なのに……」
実はそれ、
戻り値 を使えばきれいに解決できます。

関数に仕事だけを任せたい場面
たとえば、次のようなケースです。
- 関数には計算だけをお願いしたい。
- 表示やその後の処理は呼び出し側で制御したい。
関数の中で
計算も表示も全部やってしまうと、
あとから使い回しにくくなってしまいます。
そんなときに登場するのが、
関数の戻り値 という考え方です。
戻り値とは何か
戻り値とは、
関数が処理を終えたあとに、呼び出し元へ返す値
のことです。
流れを整理すると、次のようになります。
| 手順 | 処理の流れ |
|---|---|
| ① | 呼び出し元が関数を呼ぶ。 |
| ② | 関数が内部で処理を行う。 |
| ③ | 処理結果を戻り値として返す。 |
| ④ | 呼び出し元がその値を受け取る。 |
つまり、
引数は「お願いするときに渡す情報」、
戻り値は「仕事が終わって返ってくる結果」
と考えるとわかりやすいですね。
戻り値を返す関数の基本形
戻り値を返す関数は、
次の形で定義します。
戻り値の型 関数名(仮引数リスト)
{
処理内容
return 戻り値;
}ここで注目すべきポイントは2つあります。
| 注目点 | 意味 |
|---|---|
| 戻り値の型 | どんな型の値を返すかを表明する。 |
| return 文 | 実際に返す値を指定する。 |
void と戻り値の違い
これまで使ってきた void は、
- 戻り値がない。
- 何も返さない。
ということを表していました。
一方で、
戻り値がある関数では、
int や double などの型を指定します。
| 指定 | 意味 |
|---|---|
| void | 戻り値なし |
| int | int 型の値を1つ返す |
| double | double 型の値を1つ返す |
関数定義の1行目は、
呼び出す側への重要な約束 なのです。
戻り値を使ったサンプル例
次は、
計算だけを行い、結果を呼び出し元に返す関数の例です。
表示内容は呼び出し側で行うようにしています。
プロジェクト名:8-9-1 ソースファイル名: sample8-9-1.c
#include <stdio.h>
int calcTotal(int base, int bonus)
{
int total = base + bonus;
return total;
}
int main(void)
{
int score = 80;
int result;
result = calcTotal(score, 15);
printf("合計点は %d 点です\n", result);
return 0;
}このプログラムの流れ
このコードでは、次のような流れで処理が進みます。
- main 関数が calcTotal を呼び出す。
- 引数として base と bonus が渡される。
- 関数内で合計値を計算する。
- return 文で合計値を返す。
- 呼び出し元で result として受け取る。
関数は
値を作って返す部品
として使われています。
戻り値は「関数の答え」
戻り値は、
関数が出した 最終的な答え です。
- 計算結果
- 判定結果
- 状態を表す数値
など、
さまざまな用途で使われます。
このしくみを理解すると、
関数を「処理の箱」ではなく
「答えを返す部品」として設計できるようになります。
return 文の役割
return 文には、
次の2つの役割があります。
| 役割 | 内容 |
|---|---|
| 処理の終了 | その場で関数の実行を終える。 |
| 値の返却 | 呼び出し元に値を返す。 |
戻り値を持つ関数では、
必ず return 文で
指定した型の値を1つ返す必要があります。
戻り値がない関数の return
戻り値を持たない関数では、
return 文は省略できます。
void greet(void)
{
printf("こんにちは\n");
}あえて書く場合は、次の形になります。
return;この場合、
値は返さず、処理だけを終了します。
まとめ:戻り値で役割分担ができる
戻り値を使うことで、
- 関数は計算や判定に専念
- 呼び出し元は表示や制御を担当
という、
きれいな役割分担 が可能になります。
この考え方は、
後に学ぶエラーコード設計や
複雑な処理の分割でも大活躍します。
