C 语言中 setjmp 和 longjmp( 四 )

voidlongjmp(jmp_bufenvintval);

longjmp 函数的功能是从 jmp_buf 结构体中恢复由 setjmp 函数保存的上下文 , 该函数不返回 , 而是从 setjmp 函数中返回 。

参数 env 是由 setjmp 函数保存过的上下文 。

参数 val 表示从 longjmp 函数传递给 setjmp 函数的返回值 , 如果 val 值为0 , setjmp 将会返回1 , 否则返回 val 。

longjmp 不直接返回 , 而是从 setjmp 函数中返回 , longjmp 执行完之后 , 程序就像刚从 setjmp 函数返回一样 。

简单实例

下面是个简单的例子 , 虽然还只是函数内跳转 , 但足以说明这两个函数的功能了 。

运行该程序得到的结果为:

i=0

i=2

C 语言异常处理

推荐阅读