在longjmp
和setjmp
的手册中,有一行:
如果调用
setjmp()
的函数在调用longjmp()
之前返回,则行为未定义。
这是否意味着我必须在调用setjmp
的函数或嵌套函数中的某个地方调用setjmp
?或者根本不叫它可以吗?
发布于 2017-12-23 12:51:36
你看错了。
如果调用setjmp()的函数在调用longjmp()之前返回,则行为未定义。
如果您在从设置longjmp
的函数返回后调用它,则setjmp
的行为是未定义的。但是完全可以完全不打电话给longjmp
。
维基百科更清晰:
如果调用setjmp的函数返回,则不再可能在相应的jmp_buf对象中安全地使用longjmp。 这是因为当函数返回时,堆栈帧将失效。调用longjmp将恢复堆栈指针,因为返回的函数将指向一个不存在且可能被覆盖或损坏的堆栈帧。
这些函数通常用于处理异常机制。如果没有出现异常,您不想调用longjmp
,因为没有理由“倒带”您的程序。
https://stackoverflow.com/questions/47955907
复制相似问题