下面是三种C语言的错误处理,你喜欢哪一种?还是都不喜欢?
/* 问题: 不充分,而且很容易出错,前面成功分配的资源,后面出错需要帮助释放 */ intfoo(intbar) { intreturn_value = 0; intdoing_okay = 1; doing_okay = do_something( bar ); if(doing_okay) { doing_okay = init_stuff(); } if(doing_okay) { doing_okay = prepare_stuff(); } if(doing_okay) { return_value = do_the_thing( bar ); } returnreturn_value; }
/* 问题: 使用goto语句是很不好的 */ intfoo(intbar) { if(!do_something( bar )) { gotoerror; } if(!init_stuff( bar )) { gotoerror; } if(!prepare_stuff( bar )) { gotoerror; } returndo_the_thing( bar ); error: return0; }
/* 问题:太多的if嵌套了,无法阅读 */ intfoo(intbar) { intreturn_value = 0; if(do_something( bar )) { if(init_stuff( bar )) { if(prepare_stuff( bar )) { return_value = do_the_thing( bar ); } } } returnreturn_value; }