调用longjmp导致程序在msvc 2010上以代码0退出

时间:2013-05-06 10:18:35

标签: visual-c++ longjmp setjmp

我正在尝试使用setjmp/longjmp进行错误处理,但是,在使用MSVC 2010编译时,对longjmp的调用导致程序以代码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)编译了相同的代码。即,

$ 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吗?

非常感谢, 哈桑。

1 个答案:

答案 0 :(得分:2)

longjmp(env, -2);会触发您的default:案例,该案例会打印Unknown error!,然后从您执行switch的{​​{1}}语句中显示。它的工作方式和你写的完全一样。从main()返回0基本上与退出0相同.MSVC只是告诉你退出值。