戻り値とは

もどりち

関数が処理を終えて呼出し元に返す値。擬似言語では return の後に書いた式の値が戻り値になり、return を実行した時点で関数の処理は終わる。

「戻り値」は、7分野の14問の練習問題に出てきます(プログラミングの基礎(擬似言語のトレース), 命令セット・アセンブリ, リンカ・ローダと実行形式など)。

この用語の分野: プログラミングの基礎(擬似言語のトレース)

戻り値の練習問題に挑戦

RISC-Vの標準の呼び出し規約で、整数の引数と戻り値の受け渡しに使うレジスタとして正しいものはどれか。

  1. A引数はs0〜s7、戻り値はra
  2. B引数はa0〜a7、戻り値はa0(とa1)
  3. C引数はすべてスタック、戻り値はsp
答えと解説を見る

正解:B. 引数はa0〜a7、戻り値はa0(とa1)

RISC-Vの標準の呼び出し規約では、整数の引数を最大8個までa0〜a7(x10〜x17)に入れて渡し、戻り値はa0に、RV32での64ビットの値などはa0とa1の2つに入れて返します。メモリより速いレジスタで受け渡すので、関数呼び出しの手間が小さくなります。8個を超える引数はスタックに置きます。浮動小数点の引数はfa0〜fa7を使います。

関数 f(x, y) を「y が0なら x を返し、そうでなければ f(y, x mod y) を返す」と定義する。f(84, 36) を呼んだときの戻り値と、f が呼ばれる回数(最初の呼び出しを含む)の組はどれか。

  1. A戻り値12、呼ばれる回数3回
  2. B戻り値12、呼ばれる回数4回
  3. C戻り値6、呼ばれる回数3回
答えと解説を見る

正解:A. 戻り値12、呼ばれる回数3回

f(84, 36) は 84 mod 36 = 12 なので f(36, 12) を呼び、36 mod 12 = 0 なので f(12, 0) を呼び、y が0なので12を返します。呼び出しは f(84, 36)、f(36, 12)、f(12, 0) の3回で、これはユークリッドの互除法による最大公約数の計算です。この関数は再帰呼び出しの結果をそのまま返す末尾再帰なので、コンパイラが末尾呼び出しの最適化を行えばループに変換でき、呼び出しが深くなってもスタックを使い続けません。

解説の中の「戻り値」

「戻り値」が出てくる問題(14問)

  1. RISC-Vの標準の呼び出し規約で、整数の引数と戻り値の受け渡しに使うレジスタとして正しいものはどれか。
  2. 関数 f(x, y) を「y が0なら x を返し、そうでなければ f(y, x mod y) を返す」と定義する。f(84, 36) を呼んだときの戻り値と、f が呼ばれる回数(最初の呼び出しを含む)の組はどれか。
  3. ÷ は除算で、整数型の変数(引数を含む)に代入するときは小数点以下を切り捨てる。次の関数 f を f(9087) として呼び出したときの戻り値はどれか。
  4. ÷ は除算で、整数型の変数(引数を含む)に代入するときは小数点以下を切り捨てる。次の関数 toBin を toBin(12) として呼び出したときの戻り値はどれか。
  5. 次の関数 s を s(7) として呼び出したときの戻り値はどれか。
  6. 次の関数 fib を fib(10) として呼び出したときの戻り値はどれか。
  7. 上の関数 f を3回続けて呼び出したとき、3回目の戻り値として正しいものはどれか。
  8. 呼び出し規約(コーリングコンベンション)が決められている主な目的はどれか。
  9. プログラムの誤りのうち、コンパイルの時点で見つけることができるものはどれか。
  10. C言語のプログラムで、OSが最初に実行を始める番地(エントリポイント)について正しいものはどれか。
  11. C言語のmain関数が「return 3;」で終わったとき、その値3は一般にどうなるか。
  12. CUDAで、GPUカーネル(__global__を付けた関数)が計算した結果を、CPU側のプログラムで受け取る方法として正しいものはどれか。
  13. ÷ は除算で、整数型の変数(引数を含む)に代入するときは小数点以下を切り捨てる。次の関数 pow を pow(2, 10) として呼び出したとき、pow が呼ばれる回数(最初の呼出しを含む)はどれか。
  14. 次の関数 c を c(4, 2) として呼び出したとき、c が呼ばれる回数(最初の呼出しを含む)はどれか。

プログラミングの基礎(擬似言語のトレース)の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

関連する用語

引数 スタック 変数 剰余演算 再帰 呼び出し規約 整数除算 ABI(アプリケーションバイナリインターフェース) 構文解析 エントリポイント

用語集の一覧へ