isetjmp 和 longjmp 例程用于处理在程序的低级例程中遇到的错误和中断。它们属于 f95 内函数。
如非必要,不应使用这些例程。它们受规范约束,且不可移植。有关错误和其他详细信息,请参见 setjmp(3V) 手册页。
isetjmp 在 env 中保存堆栈环境。它还会保存寄存器环境。
longjmp 会恢复上次调用 isetjmp 时保存的环境,并以继续执行这种方式返回值,就好像刚执行 isetjmp 调用返回 ival 值一样。
如果未调用 longjmp,从 isetjmp 返回的整型表达式 ival 为零,如果调用了 longjmp,则返回的 ival 不为零。
示例:使用 isetjmp 和 longjmp 的代码片断:
INTEGER*4 env(12) common /jmpblk/ env j = isetjmp( env ) if ( j .eq. 0 ) then call sbrtnA else call error_processor end if end subroutine sbrtnA INTEGER*4 env(12) common /jmpblk/ env call longjmp( env, ival ) return end |