2013-05-06 79 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