Oracle Solaris Studio 12.4 Man Pages

Exit Print View

Updated: January 2015
 
 

isetjmp(3F)

Name

longjmp , isetjmp - longjmp 返回到 isetjmp 设置的位置

Synopsis

用法: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。

Description

isetjmplongjmp 例程用于处理在程序的低级别例程中遇到的错误和中断。这些例程应仅用作最后手段,因为它们需要规程,并且不可移植。有关错误及其他详细信息,请参阅手册页 setjmp(3C)。

isetjmp 将堆栈环境保存在 env 中。它还保存寄存器环境。

longjmp 恢复上一次调用 isetjmp 所保存的环境并返回,其返回时会继续执行,就像对 isetjmp 的调用返回了值 ival 一样。

如果未调用 longjmp,则从 isetjmp 返回的整数表达式 ival 为零;如果调用了 longjmp,则返回非零值。

示例:使用 isetjmplongjmp 的代码片段:

 
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

Bugs

请参见 setjmp(3C)。

Files

libC.a

See also

setjmp(3C)