0

我正在尝试使用setjmp/longjmp错误处理,但是,对 longjmp 的调用导致程序在使用 MSVC 2010 编译时以代码 0 退出,这是完整的消息:

The program '[5020] test.exe: Native' has exited with code 0 (0x0).

这是代码:

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

int main(void)
{
    jmp_buf env;
    switch(setjmp(env))
    {
    case 0:
        printf("normal operation\n");
        longjmp(env, -2);
        break;
    case -1:
        printf("known error\n");
        break;
    default:
        printf("Unknown error!\n");
        break;
    }
    return 0;
}

我使用基于 gnu 的编译器(cygwin 下的 bfin-elf-gcc)编译了相同的代码,效果很好。IE,

$ make
bfin-elf-gcc -c -Wall main.c -mcpu=bf533-any -o main.o
bfin-elf-gcc main.o -mcpu=bf533-any -msim -o bfin_test

$ bfin-elf-run.exe bfin_test
normal operation
Unknown error!

知道为什么它不能在 msvc 上运行吗?

非常感谢,哈桑。

4

1 回答 1

2

longjmp(env, -2);触发您的default:案例,该案例打印Unknown error!然后从您的switch声明中出现,在哪里return 0;执行。它的工作方式与您编写的完全一样。从 main() 返回 0 与退出 0 基本相同。MSVC 只是告诉您退出值。

于 2013-05-06T10:21:35.787 回答