分类: C/C++
2012-08-29 18:10:34
Setjmp ()和longjmp ()
setjmp () 被调用一次,却有多个返回值,但是longjmp () 被调用多次。
Setjmp (jmp_buf j) 首先被调用,记录变量j 的现在位置。函数返回值0 。
Longjmp (jmp_buf j,int i) 回到j 的位置,但是却返回 i 的值。并且在使用longjmp () 时,j 的值被摧毁。
Longjmp () 和 goto 语句不同。
Goto 只能在函数里面跳转。
但是longjmp () 可以非本地跳转。但是却只能跳转到自己去过的地方,就是setjmp() 所记录的位置。
如果函数退出,setjmp () 的调用信息存放在jmp_buf env 中,如果此时,调用longjmp ()在恢复时就不在是程序点了,调用longjmp() 就会产生不可估计的错误。