沙漏不倒翁 - 小屋

异常处理

虽然是个不常用的东西但是看到它的进化版是C++的catch和throw就有点动心

#include <stdio.h>
#include <setjmp.h>

jmp_buf buf;
void b()
{
    longjmp(buf, 1);

    printf("cc");
}
int main()
{
    if(setjmp(buf))
        ;
    else
        b();
    printf("dd");

    return 0;
}

setjmp(buf) 必须先调用,而第一次调用的时候返回0,在longjmp(buf, 1)后,跳回setjmp处不过此时返回1. 因此在函数调用时先调用setjmp去switch可以实现函数多种异常信息的返回

但是这种长跳转还是应该避免使用。

主题来自 Ruchee