引数とは

ひきすう

関数や手続を呼び出すときに渡す値。宣言の側で値を受け取る変数を仮引数、呼出しの側で渡す値を実引数という。値をコピーして渡す値渡しと、変数や配列そのものを参照させる参照渡しがある。

「引数」は、11分野の28問の練習問題に出てきます(リンカ・ローダと実行形式, プログラミングの基礎(擬似言語のトレース), コンパイラなど)。

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

引数の練習問題に挑戦

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を使います。

RISC-Vの標準の呼び出し規約で、整数の引数が10個ある関数を呼ぶとき、9個目と10個目の引数はどこで渡されるか。

  1. As0とs1
  2. Bt0とt1
  3. Cスタック上
答えと解説を見る

正解:C. スタック上

引数用のレジスタはa0〜a7の8本なので、9個目以降は呼び出す側がスタックに積み、呼ばれた側はスタックポインタからの決まった位置で読みます。メモリへのアクセスが増えるので、引数がとても多い関数は少し遅くなります。大きな構造体はまとめて構造体へのポインタで渡すなど、引数を少なくする工夫がよく使われます。

解説の中の「引数」

「引数」が出てくる問題(28問)

  1. RISC-Vの標準の呼び出し規約で、整数の引数と戻り値の受け渡しに使うレジスタとして正しいものはどれか。
  2. RISC-Vの標準の呼び出し規約で、整数の引数が10個ある関数を呼ぶとき、9個目と10個目の引数はどこで渡されるか。
  3. C++のコンパイラが関数名に引数の型などの情報を付け加えてシンボル名を作る「名前修飾(マングリング)」の主な目的はどれか。
  4. 上のように、スクリプト s.sh を引数を付けて実行したときの出力として、正しいものはどれか。
  5. ÷ は除算で、整数型の変数(引数を含む)に代入するときは小数点以下を切り捨てる。次の関数 f を f(9087) として呼び出したときの戻り値はどれか。
  6. ÷ は除算で、整数型の変数(引数を含む)に代入するときは小数点以下を切り捨てる。次の関数 toBin を toBin(12) として呼び出したときの戻り値はどれか。
  7. ÷ は除算で、整数型の変数(引数を含む)に代入するときは小数点以下を切り捨てる。次の関数 pow を pow(2, 10) として呼び出したとき、pow が呼ばれる回数(最初の呼出しを含む)はどれか。
  8. ÷ は除算で、整数型の変数(引数を含む)に代入するときは小数点以下を切り捨てる。次のプログラムは、昇順に整列された整数型の配列 data(要素番号は1から始まる)で、x 以上の値が最初に現れる要素番号を lo に求める。x は data の最後の要素以下とする。プログラム中の【a】に入れる字句はどれか。
  9. 呼び出し規約(コーリングコンベンション)が決められている主な目的はどれか。
  10. コンパイラの意味解析で見つかる誤りの例として最も適切なものはどれか。
  11. 関数のインライン展開の利点と欠点の組み合わせとして正しいものはどれか。
  12. 上の関数の最後の再帰呼び出しに末尾呼び出しの最適化を行うと、どのような効果があるか。
  13. 静的な型をもつ言語で、コンパイラが型検査を行う主な利点はどれか。
  14. プログラムを起動するとき(Linuxのexecveなど)に、OSのローダが行うこととして正しいものはどれか。
  15. C言語のプログラムで、OSが最初に実行を始める番地(エントリポイント)について正しいものはどれか。

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

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

関連する用語

変数 戻り値 スタック ポインタ 配列 呼び出し規約 再帰 構造体 リンカ 剰余演算

用語集の一覧へ