C longjmp()

longjmp() 函数定义在 setjmp.h 头文件中。它有助于恢复先前通过 setjmp() 宏在程序的相同调用中,用相应的参数 jmp_buf 保存的栈环境。


void longjmp(jmp_buf environment, int value); #where environment is the object

 

longjmp() 参数

longjmp() 函数接受两个参数。当调用 longjmp() 时,所有可用于接收控制的函数的变量都会拥有它们原有的值。

参数 描述 必需/可选
environment jmp_buf 类型的对象,包含用于恢复 setjmp 调用时的环境信息。 必需
value setjmp 表达式评估的值 必需 

longjmp() 返回值

longjmp() 函数不返回任何值。

longjmp() 示例

示例 1:C 语言中 longjmp() 函数的工作原理?


#include <stdio.h>
#include <stdlib.h>
#include <setjmp.h>
int main () {
   int x;
   jmp_buf env;

   x = setjmp( env );
   
   if( x != 0 ) {
      printf("Output from a longjmp() with value as %s\n", x);
      exit(0);
   }
   printf("Function call\n");
   jmpfunction( env );
   
   return(0);
}

void jmpfunction(jmp_buf env) {
   longjmp(env, "Programming");
}

输出


Function call
Output from a longjmp() with value as Programming

示例 2:C 语言中 pow() 函数的工作原理?


#include <stdio.h>
#include <stdlib.h>
#include <setjmp.h>
jmp_buf env;

void output( void )
{
    printf( "About to longjmp\n" );
    longjmp( env, 14 );
}

int main( void )
{
    int value = 293;

    if( 0 == ( value = setjmp( env ) ) ) {
        printf( "After calling %d\n", value );
        rtn();
        printf( "Back from output %d\n", value );
    } else {
        printf( "Back from longjmp %d\n", value );
    }
    
    return EXIT_SUCCESS;
}

输出


After calling setjmp 0
About to longjmp
Back from longjmp 14