C语言 Using the setjmp and longjmp



有这么简单的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。

最新更新