longjmp() 函数定义在 setjmp.h 头文件中。它有助于恢复先前通过 setjmp() 宏在程序的相同调用中,用相应的参数 jmp_buf 保存的栈环境。
void longjmp(jmp_buf environment, int value); #where environment is the object
longjmp() 函数接受两个参数。当调用 longjmp() 时,所有可用于接收控制的函数的变量都会拥有它们原有的值。
| 参数 | 描述 | 必需/可选 |
|---|---|---|
| environment | jmp_buf 类型的对象,包含用于恢复 setjmp 调用时的环境信息。 | 必需 |
| value | setjmp 表达式评估的值 | 必需 |
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
#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