ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# C 库宏 - setjmp() ## 描述 C 库宏 **int setjmp(jmp_buf environment)** 把当前环境保存在变量 environment 中,以便函数 **longjmp()** 后续使用。如果这个宏直接从宏调用中返回,则它会返回零,但是如果它从 **longjmp()** 函数调用中返回,则它会返回一个传给 longjmp 作为第二个参数的非零值。 ## 声明 下面是 setjmp() 宏的声明。 ``` int setjmp(jmp_buf environment) ``` ## 参数 * **environment** -- 这是一个类型为 jmp_buf 的用于存储环境信息的对象。 ## 返回值 这个宏可能不只返回一次。第一次,在直接调用它时,它总是返回零。当调用 longjmp 时带有设置的环境信息,这个宏会再次返回,此时它返回的值会传给 longjmp 作为第二个参数。 ## 实例 下面的实例演示了 setjmp() 宏的用法。 ``` #include <stdio.h> #include <stdlib.h> #include <setjmp.h> int main() { int val; jmp_buf env_buffer; /* 保存 longjmp 的调用环境 */ val = setjmp( env_buffer ); if( val != 0 ) { printf("从 longjmp() 返回值 = %s\n", val); exit(0); } printf("跳转函数调用\n"); jmpfunction( env_buffer ); return(0); } void jmpfunction(jmp_buf env_buf) { longjmp(env_buf, "w3cschool.cc"); } ``` 让我们编译并运行上面的程序,这将产生以下结果: ``` 跳转函数调用 从 longjmp() 返回值 = w3cschool.cc ```