Thinkers'Studio
JavaとC言語の自習ツール
関数からの return に関するTips
 今回は、return 文について少し整理したいと思います。
 関数は関数の終わりの } に達すると、呼び出し元に戻ります。 return 文を使うと、その場で呼び出し元に戻ります。

return の後ろの式

 後ろの式を書かないときは、何の値も返さずに戻ります。
  例)return;
 後ろに式を書くと、その評価結果を持ち帰ります。 式には、定数値や変数、計算式や関数の呼び出しなどを書きます。
  例1)return -1;                 //定数値を返す
  例2)return cnt;                //変数の値を返す
  例3)return sign * n;           //演算結果を返す
  例4)return euclid( b, a % b ); //関数を実行しその結果を返す

 戻り値が voidの関数では、必要があるときだけ return; を書きます。 return 式; とすると、コンパイル・エラーになります。
 逆に、値を返す関数では、return 式; で何らかの値を返さなければ、コンパイル・エラーになります。
 return の後ろの式を ( ) で囲む形をよく見かけますが、その必要はありません。
 また、ひとつの関数に return 文が複数あっても構いません。

戻り値の型と一致しない型を returnしようとすると

 エラーにはならず、関数の戻り値型に型変換されます。
 もちろん、型は合わせて書いておくべきです。 もし暗黙の型変換が起こると分かっている場合でも、キャストを使って明示する方が曖昧さのないコードとなります。

[ 関連記事 ] 上の例1〜例4は他のTipsに登場したreturn文です。 下記で参照できます。
例1)日付チェック, 例2)空き座席をカウント, 例3)atoi関数, 例4)最大公約数


(今週のクイズです)
 下記は、小数点以下第1位で四捨五入する関数です。
//改善したい関数
shishagonyu( double x )
{
   return x < 0.0 ? x-0.5 : x+0.5;
}
 正しく動きますが、曖昧さのない書き方という点で改善すべき箇所があります。 どのようにすればよいか考えてみましょう。
   (答えは、次の C言語の Tips で ・・・ )
前回のクイズの答え: scanfの例の戻り値は 1、sscanfの例では戻り値が 2。 (前回の問題を見る
読み込んで変数に代入された数が戻り値として返されます。読み捨てた数は含まれません。