首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我一定要在“setjmp”之后叫'longjmp‘吗?

我一定要在“setjmp”之后叫'longjmp‘吗?
EN

Stack Overflow用户
提问于 2017-12-23 12:47:19
回答 1查看 430关注 0票数 8

longjmpsetjmp的手册中,有一行:

如果调用setjmp()的函数在调用longjmp()之前返回,则行为未定义。

这是否意味着我必须在调用setjmp的函数或嵌套函数中的某个地方调用setjmp?或者根本不叫它可以吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-23 12:51:36

你看错了。

如果调用setjmp()的函数在调用longjmp()之前返回,则行为未定义。

如果您在从设置longjmp的函数返回后调用它,则setjmp的行为是未定义的。但是完全可以完全不打电话给longjmp

维基百科更清晰:

如果调用setjmp的函数返回,则不再可能在相应的jmp_buf对象中安全地使用longjmp。 这是因为当函数返回时,堆栈帧将失效。调用longjmp将恢复堆栈指针,因为返回的函数将指向一个不存在且可能被覆盖或损坏的堆栈帧。

这些函数通常用于处理异常机制。如果没有出现异常,您不想调用longjmp,因为没有理由“倒带”您的程序。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47955907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文