有这么简单的C代码
#include <stdio.h>
#include <setjmp.h>
void Com_Error(int);
jmp_buf abortframe;
int main() {
if (setjmp (abortframe)){
printf("abortframe!n");
return 0;
}
Com_Error(0);
printf("main endn");
return 0;
}
void Com_Error(int code) {
// ...
longjmp (abortframe, code);
//...
}
我:
abortframe !
我的问题是,如果我们通过0
(不是true
),为什么它打印abortframe!
,因此条件if (setjmp (abortframe)){...}
不应该满足,所以没有abortframe!
字符串打印?
阅读友好手册(C17 7.13.2.1):
longjmp函数不能导致setjmp宏返回值0;如果val为0,setjmp宏返回值1。