C 语言中 setjmp 和 longjmp

C 语言中 setjmp 和 longjmp


"multi_version":false

在 C 语言中 , 我们不能使用goto语句来跳转到另一个函数中的某个label处;但提供了两个函数——setjmp和longjmp来完成这种类型的分支跳转 。 后面我们会看到这两个函数在处理异常上面的非常有用 。

setjmp 和 longjmp 使用方法

我们都知道要想在一个函数内进行跳转 , 可以使用goto语句(不知怎么该语句在中国学生眼中就是臭名昭著 , 几乎所有国内教材都一刀切地教大家尽量不要使用它 , 但在我看来 , 这根本不是语言的问题 , 而是使用该语言的人 , 看看 Linux 内核中遍地是 goto 语句的应用吧!) , 但如果从一个函数内跳转到另一个函数的某处 , goto 是不能完成的 , 那该如何实现呢?

函数间跳转原理

我们要实现的一个GOTO语句(我自己定义的) , 能实现在函数间进行任意跳转 , 如下例 , 在函数 g() 中有条语句GOTO Label;可以跳转到 f() 函数的Label:标签所指向的位置 , 那么我们该如何实现呢?

推荐阅读