comparison paper/chapter2.tex @ 38:c4dbd7b81302

update
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Thu, 14 Feb 2019 15:53:51 +0900
parents 25ef2b0220df
children 5169e3bc40f9
comparison
equal deleted inserted replaced
37:d11c91e8a1fc 38:c4dbd7b81302
73 しかしCodeGearからCの関数に再び戻り、 CodeGear同士の遷移から外れるように実装したい場合がある。 73 しかしCodeGearからCの関数に再び戻り、 CodeGear同士の遷移から外れるように実装したい場合がある。
74 この際は環境付きgotoと呼ばれる手法を取る。 74 この際は環境付きgotoと呼ばれる手法を取る。
75 これは\_CbC\_return及び、 \_CbC\_environmentという変数を使用する。 75 これは\_CbC\_return及び、 \_CbC\_environmentという変数を使用する。
76 この変数は \_CbC\_return が元の環境に戻る際に利用する CodeGear を指し、 \_CbC\_environment は復帰時に戻す元の環境である。 76 この変数は \_CbC\_return が元の環境に戻る際に利用する CodeGear を指し、 \_CbC\_environment は復帰時に戻す元の環境である。
77 復帰する場合、 呼び出した位置には帰らず、 呼び出した関数の終了する位置に帰る。 77 復帰する場合、 呼び出した位置には帰らず、 呼び出した関数の終了する位置に帰る。
78 実際に環境付き継続を利用した場合のサンプルコードをソースコード\ref{cbc_return_src}に示す。
79
80 \lstinputlisting[frame=lrbt, label=cbc_return_src, caption=環境付き継続の例]{./codes/src/return.cbc}
81
82 この例では、 通常 c\_funcの返り値が-1である為、 変数testには-1が設定されるかの様に見える。
83 しかし関数 c\_func内でCodeGearである cgに軽量継続しており、 cgでは環境付きgotoを利用して、 1を返り値としてCの関数に戻る。
84 この場合、 呼び出し元 c\_funcの返り値である -1 の代わりに、 環境付きgotoで渡される1が優先され、 変数testには1が代入される。