2013-05-06 42 views
0

我试图使用setjmp/longjmp错误处理,但是,调用longjmp导致程序退出时使用MSVC 2010编译代码0,在这里是完整的邮件:呼叫longjmp导致程序退出与代码0 msvc 2010

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精灵-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

longjmp(env, -2);触发您default:情况下,它打印Unknown error!,然后从你的switch声明,在其中执行return 0;出现。它的工作方式与您所写的完全相同。从main()返回0基本上与以0退出相同。MSVC只是告诉你退出值。

+0

我可以通过在return 0之前有另一个printf语句来验证它是否工作正常;并有一个断点。造成我的困惑的原因是,由于某种原因,放置在默认情况下的断点没有被打(尽管“未知错误”被打印)。谢谢您的帮助 – has981 2013-05-06 10:28:05