わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

準正答

いきなりですが問題です.

次の文について,不適切な箇所を2つ見つけ,「修正前→修正後」の形で解答しなさい.

  • 「int add(int a, b) { ... }」のように関数を定義するとき,変数aやbを実引数という.

一つは容易です.「実→仮」です.これらの変数aやbは,関数addの仮引数です.「実引数→仮引数」でも,いいでしょう.
もう一つですが,関数定義の仮引数は,「int a, b」という一括宣言はできず,「int a, int b」と書かないといけません*1
では,答えは「b→int b」でしょうか?
もしそうすると,提示した文には「b」が2箇所あるので,

  • 「int add(int a, int b) { ... }」のように関数を定義するとき,変数aやint bを仮引数という.

と書き換えることになるのでしょうか? そんなこと,ありませんか*2
誤解を招かないようにするには,「int a, b→int a, int b」と書きます.これで

  • 「int add(int a, int b) { ... }」のように関数を定義するとき,変数aやbを仮引数という.

となります.
上記は某日の授業終了時の小テストです.「b→int b」も準正答とみなしてマルにしましたので,正解率(両方正解した学生)は90%を超えました.

かつて取り上げた準正答

*1:文法規則上,そうなっているからなのですが,理解の仕方としては,関数プロトタイプ宣言で引数(変数)を書かないとき,「int add(int,);」では都合が悪い,と考えるのがよさそうに思います.

*2:sed -e 's/b/int b/'とすれば,最初のbだけ置換になりますし.