在C中清除错误处理方法

Wei*_*Shi 7 c error-handling

我正在编写一个需要良好错误处理的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)要打电话.在这种情况下,是否有更好更清洁的方法来处理错误?

Geo*_*sov 7

有些人,特别是初级到中级程序员,对于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内核中.