1.程序分为Debug版本和Release版本:Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。
Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。
2.【生成解决方案】命令让Visual Studio 2005编译各个源文件,并将它们链接成为.exe文件或其他形式的程序文件。
3.【重新生成解决方案】这个命令让编译器重新编译所有源文件,即使这些文件没有被修改过。
4..【清理解决方案】命令用于清除解决方案在以前生成可执行文件时产生的旧文件。
5.只有在程序挂起的时候才能添加监视等功能。
6.调用堆栈:调用堆栈反映了当前断点处函数是被哪些函数按照什么顺序调用的。在调用堆栈对话框中显示了一个调用系列,最上面的是当前函数,往下依次是调用函数的上级函数。单击这些函数名可以跳到对应的函数中去。
7.try throw catch异常处理。try块将检测以下三个函数中是否有抛出的异常。
Throw抛出异常,catch找到异常后的处理。
8.如果没有异常发生,则执行try块中的代码,和try块相关联的处理代码catch被忽略。
9.需要注意的是try块可以包含任何C++语句表达式以及声明,一个try块引入一个局部域,在try块内声明的变量不能在try块外被引用,包括在catch子句中。
10.当某条语句抛出异常时,跟在该语句后面的语句将被跳过,程序执行权被转交给处理异常的catch子句。
11.程序异常类举例:
class NumberExc
{
public:
NumberExc(int _excNum)
{
errorNum = _excNum;
cout<<"捕获到异常"<<endl;
}
void proExc()
{
switch(ExcNum)
{
case 0:
cout<<"除数为0"<<endl;
break;
case 1:
cout<<"数字过大"<<endl;
break;
case 2:
cout<<"数字过小"<<endl;
break;
}
}
int ExcNum;
};
void TestFunction1(int ival)
{
if(ival>1000)
throw NumberExc(1);
}
void TestFunction2(int ival)
{
if(0 == ival)
throw NumberExc(0);
}
void TestFunction3(int ival)
{
if(ival<0)
throw NumberExc(2);
}
int main()
{
try
{
TestFunction1(13);
TestFunction2(0);
TestFunction3(16);
}
catch(NumberExc ne)
{
ne.proExc();
}
return 0;
}
12.代码如下:
//#include "Utility.h"
//
///*
//C++中的异常处理:
// 一般情况下,我们对于程序中可以预知,但无法避免的潜在错误
//进行异常处理操作。
//
//关键字:try、throw、catch
//格式:
//try
//{
//可能抛出异常的代码段,这里应该包含 if() throw XXX ;
//}
//catch(异常类型1)
//{
//对异常类型1的处理代码
//}
//catch(异常类型2)
//{
//对异常类型2的处理代码
//}
//catch(...)
//{
//对catch序列中没有被处理的任何异常类型进行处理
//}
//*/
//
enum Exception_Type{ET_ZERO,ET_TOOBIG,ET_TOOSMALL};
class CException
{
public:
Exception_Type m_Type;
public:
CException(Exception_Type _type):m_Type(_type)
{
cout<<"异常处理类..."<<endl;
}
void processExc()
{
switch(m_Type)
{
case ET_ZERO:
cout<<"除数为0"<<endl;
break;
case ET_TOOBIG:
cout<<"数据过大"<<endl;
break;
case ET_TOOSMALL:
cout<<"数据过小"<<endl;
break;
}
}
};
void main()
{
try
{
cout<<"请输入2个整型数据,介于0.0f-10.0f之间,第二个数据不能为0:";
float fValue1 = 0.0f;
float fValue2 = 0.0f;
cin>>fValue1>>fValue2;
if( fValue1 < 0.0f || fValue2 < 0.0f)
throw CException( ET_TOOSMALL );
else if(fValue1 > 10.0f || fValue2 > 10.0f)
throw CException( ET_TOOBIG );
// 浮点数与0的比较方式:
else if( abs( fValue2 -0.0f ) < 0.00001 )
throw CException(ET_ZERO);
}
catch(CException obj)
{
obj.processExc();
}
catch(char * pStr)
{
cout<<"捕获到的异常为:"<<pStr<<endl;
}
catch(...)
{
cout<<"未知异常,请自行查代码解决......"<<endl;
}
system("pause");
}
//---------多级多层异常处理---------
#include "Utility.h"
void TestFunc()
{
//内层try中可能被抛出的异常优先调用内层catch
//序列进行处理如果内层catch序列无法处理该异常,
//向外层的catch序列传递该异常
try
{
cout<<"TestFunc Called..."<<endl;
throw "我是TestFunc中被抛出的异常";
}
catch ( int )
{
}
}
void main()
{
try
{
TestFunc();
}
catch ( char * pStr)
{
cout<<"Main中的catch序列捕获到异常:";
cout<<pStr<<endl;
}
//注意...的用法:一般...出现在最外层
//的catch序列的“最后”
catch (...)
{
}
system("pause");
}