这儿的异常处理并非指的是WIN32提供的SEH等使用方法,也不是编译器给我们程序提供的异常处理方法,而是说如下程序的处理方法:
// 很基本的函数入口参数检查
void test(void *p)
{
if (!p)
return;
...
}
// 直接用断言,以便我们及时发现程序错误
void test(void *p)
{
assert(p);
...
}
// 当然用日志在某些情况下也许可行
void test(void *p)
{
if (!p)
{
log(fp, "error : something wrong here!")
return;
}
}
// 不用日志,输出调试信息也可以使我们即时知道程序哪儿出现意外状况。
void test(void *p)
{
if (!p)
{
TRACE("Error : something wrong here.\n");
return;
}
}
// 不作任何提示,通过函数返回值告诉调用者出现了错误, FALSE代表失败, TRUE代表成功。s
BOOL test(void *p)
{
if (!p)
return FALSE;
...
return TRUE;
}
以上几种方法是我们在编写程序时常用的几种方法。编写时根据情况和个人的编码风格适当选用。无论如何在函数中进行一些必要的检查还是有必要的。至于性能开销一般情况下都可以忽略,如果出现了那种BT的频繁调用情况要求优化的话,自然那些调试信息输出语句和日志记录方法是不可取的。因此在对一般不易出错的地方我们可以仅仅加个断言,这样可以告诉他人,此处不会出现这种错误,如果出现的话在DEBUG版本中我们也可以及时发现并作检查。至于RELEASE版的话当然我们漏过了这个错误信息的收集。然而这一切都由你决定,程序运行状态信息如果太多了不一定是好事。所以在必要的地方进行必要信息的收集是个聪明的办法,必要的调试信息指的是能够方便快速定位发生错误的位置,你不能希望任何一个看过这段程序的人都能找到错误的位置,因为程序本身就不应该追求任何一个人都可以读懂这种极端的工程化软件方法。