それ FORTRAN で
d.y.d - ※Multi Exit で、関数に複数の出口を与えられるものを募集していたのですが、FORTRAN の選択戻りみたいなものでしょうか。
選択戻りというのは、サブルーチンに文番号を渡すと、サブルーチンから戻った後処理を続ける場所をサブルーチン側で選べるという機能です。
program AlternateReturn integer n n=10 100 continue C 呼び出すときは文番号に * をつけて渡す call ErrorAtZero(n,*200,*300) n=10 200 continue n=n-1 goto 100 300 continue write(*,*) 'Error ', n, ' is zero' end C サブルーチンを定義するときは、文番号の仮引数の場所には * を書く C return n で n 番目の * に渡された文番号に戻る subroutine ErrorAtZero(n,*,*) integer n if (n.eq.0) return 2 write(*,*) 'OK ',n,' is not zero' return 1 end
実行結果
% g77 AlternateReturn.f % ./a.out OK 10 is not zero OK 9 is not zero OK 8 is not zero OK 7 is not zero OK 6 is not zero OK 5 is not zero OK 4 is not zero OK 3 is not zero OK 2 is not zero OK 1 is not zero Error 0 is zero
ただし、Fortran 90 などでは廃止予定事項になっているみたいです。
あと、関数ではできないようなので少し悲しい。
余談
ENTRY 文というのがあって、それを使うとサブルーチンや関数の入り口を複数作ることができるそうな。