Mic*_*ail 8 c setjmp
在该手册页longjmp和setjmp,有这样一行:
longjmp
setjmp
如果调用setjmp()之前longjmp()调用的函数被调用,则行为未定义.
setjmp()
longjmp()
这是否意味着我实际上必须在调用longjmp的函数setjmp或嵌套函数中的某个地方调用?或者根本不打电话可以吗?
Jea*_*bre 12
你读错了.
如果在调用longjmp()之前调用setjmp()的函数返回,则行为未定义.
longjmp如果在从设置的函数返回后调用它,则行为是未定义的setjmp.但是根本不打电话完全没问题longjmp.
维基百科更清晰:
如果调用setjmp的函数返回,则不再可能安全地将longjmp与相应的jmp_buf对象一起使用. 这是因为函数返回时堆栈帧无效.调用longjmp会恢复堆栈指针,因为返回的函数会指向不存在且可能被覆盖或损坏的堆栈帧.
如果调用setjmp的函数返回,则不再可能安全地将longjmp与相应的jmp_buf对象一起使用.
这是因为函数返回时堆栈帧无效.调用longjmp会恢复堆栈指针,因为返回的函数会指向不存在且可能被覆盖或损坏的堆栈帧.
这些函数通常用于处理异常机制.如果没有发生异常,您不想打电话,longjmp因为没有理由"倒回"您的程序.
归档时间:
8 年,8 月 前
查看次数:
219 次
最近记录: