Mercurial > hg > Papers > 2019 > anatofuz-thesis
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が代入される。 |