関数の作り方

関数から数値を返す

MMGames

戻り値、return文



戻り値を返す関数


前節では、関数に数値を渡す方法を解説しましたが、
今回は、その逆に関数から数値を返す方法を解説します。

実は、sum関数は、すでに数値を返すように作られています。
とりあえず、前節のsum関数を眺めてみてください。

int sum(int min,int max)
{
printf("%d\n",(min + max) * (max - min + 1) / 2);
return 0;
}
注目ポイントは2ヶ所です。
1つは、関数名の前についている、intという文字列です。
これは、main関数でそうなっていたのを真似しただけなのですが、
実は、これは、関数から返る数値の型を示しています。

もうひとつのポイントは、return文です。
今まで、特に何も考えずに関数の最後には必ずつけてきましたが、
実は、このreturn文には、数値を返すという機能があります。

つまり、このsum関数は、int型の数値 0 を返すことになっていたのです。
このような、関数から返ってくる数値を、戻り値(関数値)と呼ぶことがあります。
戻り値
関数から返される数値。
計算結果か、あるいはエラーの有無を示す数値であることが多い。
呼び出し元で戻り値を知りたい場合には、変数に代入する必要があります。
sum関数の戻り値を、変数valueに代入するには、次のようにします。

value = sum(50,100);
この戻り値を使えば、計算結果を表示するだけではなく、
呼び出し元に数値として教えることが出来ます。
呼び出し元では、それを表示したり計算に使ったりできます。
次のプログラムは、計算結果を返すようにsum関数を改造した例です。

#include <stdio.h>

int sum(int,int);	/* プロトタイプ宣言 */

int main(void)
{
	int value;
	value = sum(50,100);
	printf("%d\n",value);
	return 0;
}

int sum(int min,int max)
{
	int num;
	num = (min + max) * (max - min + 1) / 2;
	return num;
}
このプログラムの実行結果は次の通りになります。

3825
先ほどと結果は変わりませんが、今回のsum関数は計算結果を返すだけであり、
結果の表示はmain関数でprintf関数を使って行っています。
必要であれば、main関数で戻り値を別の計算に使うことも可能です。


戻り値の制限


前節で解説した引数においては、複数の引数を使うことが可能でした。
では、当然、戻り値でも・・・、と言いたいのですが、そうはいきません。
なんと、戻り値は1つだけしか返すことが出来ないのです。

そうなっている以上、戻り値は1つであきらめるしかありません。
実は、引数で数値を返すワザもありますが、これは後回しにします。

引数の場合、呼び出すときに必ず指定する必要がありましたが、
戻り値は無視してしまってもかまいません。
実を言えば、printf関数も、何文字表示したかという情報を返してきますが、
はっきり言って、そんなのどうでもいい情報なので、無視してきたのです。

なお、戻り値にも、intの他にdoubleなど、好きな型を使うことが出来ます。
また、戻り値を返さない関数を作ることも可能です。
その場合、引数名の前に、voidを指定します。
ごくごく単純な関数であれば、戻り値が不要なことは意外に多いのです。

サイト目次


第0部:プログラム概要編

  1. プログラムとは何か?

2章:プログラムの書き方

  1. 書き方のルール
  2. 書き方の慣習
  3. 練習問題2

3章:画面への表示

  1. 文字列の表示
  2. 改行文字
  3. 練習問題3

6章:キーボードからの入力

  1. 入力用の関数
  2. 入力の恐怖
  3. 練習問題6

9章:回数が決まっている繰り返し

  1. 繰り返しを行う文
  2. ループ動作の仕組み
  3. 練習問題9

10章:回数がわからない繰り返し

  1. 回数不明ループ
  2. 入力チェック
  3. 練習問題10

13章:複数の変数を一括して扱う

  1. 複数の変数をまとめて扱う
  2. 配列の使い方
  3. 練習問題13

20章:複数のソースファイル

  1. 最小限の分割
  2. 分割の定石
  3. 練習問題20