有这样一个简单的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 end\n");
return 0;
}
void Com_Error(int code) {
// ...
longjmp (abortframe, code);
//...
}我得到了:
中止帧!
我的问题是,如果我们传递abortframe! (而不是true),那么为什么它要打印if (setjmp (abortframe)){...},因此不应该满足if (setjmp (abortframe)){...}的条件,所以没有打印abortframe!字符串?
发布于 2022-06-29 10:36:02
阅读友好手册(C17 7.13.2.1):
长val函数不能使setjmp宏返回值0;如果val为0,则setjmp宏返回值1.
。
https://stackoverflow.com/questions/72799701
复制相似问题