最近要用到 sigsetjmp
和 siglongjmp
函数,按照我的理解每次调用 sigsetjmp
后就会保存堆栈,调用 siglongjmp
就会恢复堆栈。但是谢了一个程序后发现和我的预期不符:
https://gist.github.com/thekoc/f77a29da760f859bc4bc85f20f24de1b
我认为在 testjmp
这个函数里,在打印 "jmp from main, y=%d\n"
时,y 应该等于 5,因为恢复了堆栈,但是实际上却是 0。
实际的输出:
didn't jmp from testjmp
first run
didn't jmp from main, y=5
jump from testjmp
jmp from main, y=0
jump from testjmp
jmp from main, y=0
jump from testjmp
jmp from main, y=0
jump from testjmp
jmp from main, y=0
jump from testjmp
请求解惑,感谢。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.