使用C 异常来取代exit()函数[2]
文章作者 100test 发表时间 2007:08:06 12:58:35
来源 100Test.Com百考试题网
在原始代码中缺少恢复或日志记录的功能,如果发生了一个错误,程序就会"消失"不见了,让用户手足无措。下面是重新组织后的代码,注意,没有修改函数修饰符:
void main() { //初始化 ... try { ProcessMail(...). } catch (int ret) { switch (ret) { case E_INITIALIZATION_FAILURE: ... case E_IRRECOVERABLE: ... ... } } }
void ProcessMail(...) { //初始化 ... if ( initializationError ) { throw(E_INITIALIZATION_FAILURE). }
while ( !shutdown ) { try { ReadMail(...) } catch (int ret) { switch (ret) { case E_READ_ERROR: //记录错误信息 ... //试图恢复 ... if ( recovered ) { continue. } else { throw(E_IRRECOVERABLE). } break. case ... } } //继续处理 ... }
//throw()可以用来取代缺少的返回码 //但也要注意由此带来的性能损失
throw(S_OK). } // ProcessMail()
void ReadMail(...) { ... //在此无须捕捉异常 nBytesAvailable = ReadBytes(...) ... }
int ReadBytes(...) { //读取数据 if ( error ) { throw(E_READ_ERROR). } return nBytesRead. } |
src="/ncre2/js/wxgg.js">