わさっきhb

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

スタックは必須ではないが

先週の講義のトピックは,再帰でした.
再帰呼び出しがなぜうまくいくかを説明するには,関数呼び出しの戻り先や,auto変数を格納するため,メモリ上に確保されている「スタック領域」が不可欠です.昨年度までのPowerPoint資料に少し手を加えて*1,力をこめて話しました.
ところで,Cの規格として「スタック」が必須ということではなのですね.信頼している本には,一切記載がありませんでした.
しかし,関数呼び出しの機構,すなわち,

mainから関数Aを呼び出し,関数Aの中で関数Bを呼び出し,関数Bの処理を終えたら,制御は,mainではなく,「関数Aの中で関数Bを呼び出したところ」に戻らなければならない(そして,関数Aの処理を終えたら,制御は,mainの中で関数Aを呼び出したところに戻る)

を動的に実現するには,「後入れ先出し」(Last In First Out, LIFO)である,スタックが最も合理的でしょう.
今日も講義.メインは構造体(struct)ですが,ついでにtypedefとenumについても触れて,全体としては「型定義」がテーマになります.

*1:昨年度までは,popしてもメモリの中身は変わらない…スタックトップのみが移動する…という図でした.今年は,メモリ管理に限らない「スタック」の説明をすることとし,popしたら,もとあった値の上に白をかぶせて,「消えた」イメージにしました.