C言語入門|戻り値の基本と受け取り方

戻り値のしくみは前の節で学びましたね。
関数が計算結果や判定結果を呼び出し元へ返せる、というのはとても強力な仕組みです。

ただ、ここでこんな疑問が出てきやすいんです。

  • 戻り値っていくつでも返せるの?
  • return はどこに書いてもいいの?
  • 返ってきた値はどうやって使うの?

この節では、
戻り値の基本ルールと、正しい受け取り方
落ち着いて整理していきましょう。

戻り値は1つしか返せない

まず、とても大事なルールからです。

戻り値は1つしか返せません。

引数は複数指定できますが、
return 文で返せる値は必ず1つだけです。

項目可能か
引数を複数受け取る可能
戻り値を複数返す不可能

そのため、次のような書き方はできません。

return a, b;   // これは不可

もし「複数の値をまとめて返したい」場合は、

  • 配列
  • 構造体

といった 集成体型 を使って1つにまとめる、
という設計を行います。

return 文は処理を即座に終了させる

return 文には、
もう1つ重要な役割があります。

それは、

関数の実行をその場で終了させる

という点です。

次の例を見てください。

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

#include <stdio.h>

int calc(int a, int b)
{
    int result = a + b;
    return result;

    printf("計算が終わりました\n"); // 実行されない
}

この関数では、

  • return が実行された瞬間に関数は終了
  • それより下に書かれた文は一切実行されない

という動きになります。

処理の途中に return を書くときの注意

return 文は、
必ずしも関数の最後に書く必要はありません。

条件分岐の途中などで使うこともできます。

ただし、使い方には注意が必要です。

ポイント内容
return は強制終了それ以降の処理は行われない。
書く位置が重要意図せず処理を飛ばす原因になる。

「ここで関数を終わらせてよいか?」
を意識しながら使うことが大切です。

戻り値を返すだけでは何も起こらない

ここで、よくある勘違いを1つ。

「戻り値を返す関数にしたのに、画面に何も表示されない…」

これは 正しい動作 です。

戻り値を返す関数は、

  • 計算や判定をする。
  • 結果を値として返す。

だけの役割を持ちます。

表示するかどうかは、
呼び出し側の責任 になります。

戻り値を受け取らないと結果は捨てられる

次のようなコードを考えてみましょう。

int sum(int x, int y)
{
    return x + y;
}

int main(void)
{
    sum(10, 20);  // 戻り値を受け取っていない
    return 0;
}

この場合、

  • 関数は正しく計算をして
  • 戻り値も返している

のですが、
呼び出し側が受け取っていないため、結果は無視されます。

関数は仕事をしているのに、
その成果を誰も使っていない状態ですね。

戻り値を受け取る基本構文

戻り値を正しく使うには、
次の構文を使います。

戻り値を受け取る変数 = 関数名(引数リスト);

この形を使うことで、

  • 関数の戻り値が
  • 左辺の変数に代入される

という流れになります。

戻り値を受け取るサンプル例

内容と表示文を変えたサンプルを見てみましょう。

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

#include <stdio.h>

int nextYear(int current, int add)
{
    return current + add;
}

int main(void)
{
    int baseYear = 2030;

    int future1;
    future1 = nextYear(baseYear, 5);
    printf("%d年の5年後は%d年です\n", baseYear, future1);

    int future2 = nextYear(baseYear, 20);
    printf("%d年は%d年の20年後です\n", future2, baseYear);

    return 0;
}

このプログラムの処理の流れ

このコードでは、次のように動いています。

  1. main 関数が nextYear を呼び出す。
  2. 引数として現在の年と加算年数を渡す。
  3. 関数が合計値を計算する。
  4. return 文でその値を返す。
  5. 呼び出し元で変数に代入して利用する。

関数は
答えを作って返す部品 として使われています。

変数宣言と同時に受け取ってもよい

戻り値は、
次のように 変数宣言と同時 に受け取ることもできます。

int result = nextYear(baseYear, 10);

どちらの書き方でも意味は同じなので、
コードの読みやすさで使い分けるとよいでしょう。

まとめ:戻り値は「受け取ってこそ意味がある」

戻り値は、

  • 1つだけ返せる。
  • return 文で即座に関数を終了させる。
  • 受け取らなければ捨てられる。

という特徴を持っています。

関数を使うときは、

この関数は何を返すのか?
その結果をどう使うのか?

を意識すると、
プログラムの設計が一段レベルアップします。