C标准库 longjmp函数

longjmp()函数用于非局部转移进程,使进程跳转到setjmp处执行。

longjmp()函数 语法

void longjmp(jmp_buf jmp,int retval);

参数jmp为jmp_buf结构体,用于保存发生调用时的局部环境;

参数retval表示此时setjmp的返回值。

longjmp()函数本身无返回值,它执行后跳转到保存jmp的setjmp函数的调用,并由setjmp函数返回1。

longjmp()函数 示例

本示例使用longjmp函数进行非局部跳转,执行到longjmp时,程序跳转到setjmp函数中进行判断,并输出结果。其具体代码如下所示:

#include<setjmp.h>
#include<stdio.h>
#include<stdlib.h>
jmp_buf buf;
ss()/*自定义函数*/
{
    printf("%s","in ss() ");/*输出信息*/
    longjmp(buf,1);/*进行非局部跳转*/
    printf("%s","you will never see this ");/*跳转后不会输出此信息*/
}

int main(void)
{
    if(setjmp(buf))/*根据判断堆栈内容输出信息*/
    {
       printf("%s","back in main() ");
    }
    else
    {
       printf("%s","first time throught ");
       ss();/*调用自定义函数*/
    }
    return 0;
}

运行结果如图所示。

longjmp()函数

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程