首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用setjmp和longjmp

使用setjmp和longjmp
EN

Stack Overflow用户
提问于 2022-06-29 10:18:39
回答 1查看 42关注 0票数 2

有这样一个简单的C代码

代码语言:javascript
复制
#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!字符串?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-29 10:36:02

阅读友好手册(C17 7.13.2.1):

长val函数不能使setjmp宏返回值0;如果val为0,则setjmp宏返回值1.

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72799701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档