我正在编写一个需要良好错误处理的C程序.代码喜欢这样:
If(doWork("A")<0){
return -1;
}
If(doWork("B")<0){
undoWork("A");
return -1;
}
If(doWork("C")<0){
undoWork("A");
undoWork("B");
return -1;
}
return 0;
Run Code Online (Sandbox Code Playgroud)
这段代码有效,但看起来非常混乱,特别是我有一长串doWork(X)要打电话.在这种情况下,是否有更好更清洁的方法来处理错误?
有些人,特别是初级到中级程序员,对于goto在生产代码中看到了非常特殊的反应,但是顺序获取资源的常用习惯用法及其出错时的智能释放如下:
if(doWork("A") < 0)
goto errA;
if(doWork("B") < 0)
goto errB;
if(doWork("C") < 0)
goto errC;
/* success! */
return 0;
/* Error handling / releasing resources section */
errC:
undoWork("B");
errB:
undoWork("A");
errA:
return -1;
Run Code Online (Sandbox Code Playgroud)
您将在系统代码中看到大量示例,例如在Linux内核中.
| 归档时间: |
|
| 查看次数: |
665 次 |
| 最近记录: |