我正在尝试使用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吗?
非常感谢, 哈桑。
答案 0 :(得分:2)
longjmp(env, -2);
会触发您的default:
案例,该案例会打印Unknown error!
,然后从您执行switch
的{{1}}语句中显示。它的工作方式和你写的完全一样。从main()返回0基本上与退出0相同.MSVC只是告诉你退出值。