gpt4 book ai didi

c - 在此示例中,setjmp 调用的作用是什么

转载 作者:太空狗 更新时间:2023-10-29 16:12:30 26 4
gpt4 key购买 nike

我试图理解以下代码中的 setjmp:

http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/jni/android/graphics/YuvToJpegEncoder.cpp#24

这行 setjpg() 是什么意思?

32   if (setjmp(sk_err.fJmpBuf)) {
33 return false;
34 }

最佳答案

setjmp 建立一个返回点,您可以使用 longjmp 从调用堆栈深处返回。它通常被认为是糟糕的风格(类似于 goto)。

第一次调用时,它返回 0。然后如果 longjmp 恰好回到跳转点,它将好像 setjmp 返回 1。longjmp 也可以发送不同的返回码,但如果您尝试发送 0,结果将是 1。

#include <setjmp.h>

jmp_buf j;

main(){
if(setjmp(j)){
printf("boo!\n");
return 0;
}
myfunc();
printf("5");
}

myfunc(){
printf("1");
myotherfunc();
}

myotherfunc(){
printf("2");
myfriendsfunc();
}

myfriendsfunc(){
printf("3");
longjmp(j, 0);
printf("4");
}

输出:

$ ./jmp
123boo!

关于c - 在此示例中,setjmp 调用的作用是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22779056/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com