您的位置:首页 > 编程语言 > C语言/C++

cc++错误处理方法

2017-05-17 13:14 120 查看
c语言

ErrorNo ErrorCode

enum {写各种错误};

do  while

goto

Setjmp longjmp

现在 用的不多  但是看Linux内核代码的时候还是会很多这种 

#include <setjmp.h>
jmp_buf env;
double Div(double d1, double d2)
{
if (d2 == 0.0)
{
longjmp(env, 1);//不是一个返回 他是一个 goto
//跳到那里去  作为返回值
}
return d1 / d2;
}
int _tmain(int argc, _TCHAR* argv[])
{
// Setjmp longjmp  现在 用的不多  但是看Linux内核代码的时候还是会很多这种
int ret = setjmp(env);
if (ret == 0)
{
Div(5.0, 1.0);
}
else if (ret == 1)
{
printf("Error");
}
}


c++语言  

异常体系  

std::exception;//所有的异常体系的基类
std::runtime_error;//他也是一个接口
std::overflow_error;
std::range_error;//计算值错误
std::underflow_error;
std::logic_error;//
std::invalid_argument;//不存在参数
std::length_error;//超出异常
std::out_of_range;
std::domain_error;
//上面的异常 一般用...捕获 ...等同 std::exception
std::bad_alloc;//指针分配错误
std::bad_cast;//转换错误

使用方法
try
{

}

catch (MyExpict& str)
{
str.What();
}
catch (...)//所有的
{
//他是一个线程安全的
//栈里面的数据 都会 正常的销毁
//如何是堆上的 不能。 new
}

注意事项   

1 异常继承时需要派生类在基类之前

2 不要抛出指针 如果在栈当中 会被回收  如果在堆当中 会内存泄露

3 永远不在  ~析构函数抛出异常   他会终止程序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 c++