本文共 799 字,大约阅读时间需要 2 分钟。
setjmp将当前程序的运行环境存储在一个jump_buf类型的全局变量中(因为后续要被longjmp调用)
第一次调用setjmp的返回值是null
中后续的代码中执行到longjmp以后,longjmp需要两个参数,一个是之前setjmp保存到运行环境的全局变量可以调整到setjmp函数
另一个参数是setjmp函数的返回值,然后程序执行会跳转到setjmp函数并返回longjmp的第二个参数
通常应将setjmp放在各种条件控制语句中if switch while等
一个例子,参考dash文档
#include#include #include jump_buffer; noreturn void a(int count) { ("a(%d) called\n", count); (jump_buffer, count+1); // will return count+1 out of setjmp} int main(void){ volatile int count = 0; // modified local vars in setjmp scope must be volatile if (setjmp(jump_buffer) != 9) // compare against constant in an if a(count++);}
Output:
a(0) calleda(1) calleda(2) calleda(3) calleda(4) calleda(5) calleda(6) calleda(7) calleda(8) called
转载地址:http://pabg.baihongyu.com/