c语言 - 我必须在"setjmp"之后调用"longjmp"吗?



longjmpsetjmp上的manpage中,有一行:

如果在longjmp()之前返回了称为setjmp()的功能 被称为行为不确定。

这是否意味着我实际上必须在称为setjmp或嵌套函数中的函数中某个地方调用longjmp?还是可以完全不称呼它?

你正在读错误。

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

如果您将其称为后,longjmp的行为是不确定的,则从设置setjmp的函数返回。但是,完全可以打电话给longjmp是完全的

Wikipedia更清晰:

如果称为setJMP返回的函数,则不再有可能安全地使用LongJMP与相应的JMP_BUF对象。

这是因为当功能返回时,堆栈帧无效。调用longJMP还原堆栈指针,因为返回的功能,它将指向不存在且可能覆盖或损坏的堆栈框架。

这些功能通常用于处理异常机制。如果没有发生异常,则不想致电longjmp,因为没有理由"倒带"您的程序。

相关内容

最新更新