void goto_catch()
{
int i =2;
try {
i = i / 0;
}
catch (...)
{
goto tiao;
}
tiao:
cout << "ok" << endl;
}
我在手机上编译就能打印ok,vs上就中断了,所以这代码对吗?怎么设置才能让vs执行该命令呢?
#include<iostream>
#include<signal.h>
#include <setjmp.h>
using namespace std;
jmp_buf registers;
void handler(int)
{
longjmp(registers,1);
}
int main(void){
signal(SIGFPE,handler);
int i = 2 , b = 0;
if(1 == setjmp(registers))
{
goto tiao;
}
i = i / b;
tiao:
cout << "ok" << endl;
}
没必要这样这些,在实际项目开发中没有人会像你这样写的,有需求要输出ok,那直接输入就行了。
因为默认的VS2015编译器并不处理SEH异常.
设置这个试试。
#include<iostream>
#include<signal.h>
#include <setjmp.h>
using namespace std;
jmp_buf registers;
void handler(int)
{
_fpreset();
longjmp(registers, 1);
}
int main(void) {
double i = 2.0, b = 0.0;
_control87(0, _MCW_EM);
signal(SIGFPE, handler);
if (1 == setjmp(registers))
{
goto tiao;
}
i = i / b;
printf("%d", int(i));
tiao:
cout << "ok" << endl;
cout << "i:"<< i << endl;
}
double没有问题 可以越过错误 但int依旧不行