用法:isetjmp:
integer*4 env(12) common /jmpblk/ env j = isetjmp( env )
用法:longjmp:
integer*4 env(12) common /jmpblk/ env call longjmp(env,ival)
针对 64 位环境进行编译时,这些例程使用的12 元素 env 必须声明为 INTEGER*8。
isetjmp 和 longjmp 例程用于处理在程序的低级别例程中遇到的错误和中断。这些例程应仅用作最后手段,因为它们需要规程,并且不可移植。有关错误及其他详细信息,请参阅手册页 setjmp(3C)。
isetjmp 将堆栈环境保存在 env 中。它还保存寄存器环境。
longjmp 恢复上一次调用 isetjmp 所保存的环境并返回,其返回时会继续执行,就像对 isetjmp 的调用返回了值 ival 一样。
如果未调用 longjmp,则从 isetjmp 返回的整数表达式 ival 为零;如果调用了 longjmp,则返回非零值。
示例:使用 isetjmp 和 longjmp 的代码片段:
integer*4 env(12) common /jmpblk/ env j = isetjmp( env ) ! <-- isetjmp 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 ) ! <-- longjmp return end
必须先调用 isetjmp,然后再调用 longjmp()。
isetjmp 的参数必须是一个 12 整数数组。
必须通过 "common" 块或作为参数,将变量 env 从调用 isetjmp 的例程传递到调用 longjmp 的例程。
longjmp() 尝试清理堆栈。
必须从低于 isetjmp() 的调用级别调用 longjmp()。
无法以作为过程名的参数形式传递 isetjmp。
请参见 setjmp(3C)。
libC.a
setjmp(3C)