cc++错误处理方法

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 永远不在  ~析构函数抛出异常   他会终止程序


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值