???????????????δ????????(Error-Handling)????Ρ?????????(rev#2)???????
?????????????????д?????
???????????????????????????????????????????????????????????????????????????????棬???????
???????????
???????????????????????????????????????д???????????????????????????????????
?????????????????????????????????????????????????????????е????????????invariants??
?????????????
????1) ???????????????????????????????????????????????????????status-code????
??????  if(foo(...)) {...}
????else {...}
??????
????while(foo(...)) {...}
????2)???Щ“????????”?????????????????????
?????????????????????????????????????????????????????????????????????????????????????????????????
???????磺????????????????????????????????????????
???????????????????????????????????????????“???????”???????????????????????????????
????3?????????bug??????????????invariants?????????
?????????????????????????????????????????????bug??
??????(exception) vs ??????error-code??
???????error-code ??????
??????????????????error-code?????????
????1 ?鷳????????????????????
????2 ??????????????????????????????????
?????????

 

void foo()
{
try{
op1;
op2;
...
} catch (...){
//log
//clean up
throw;
}
}

???????error-code

 

int foo()
{
if(!op1()) goto FAILED;
if(!op2()) goto FAILED;
return SUCCEEDED;
FAILED:
//log?? clean up
return FAILED;
}