我需要一些想法来尝试使这个程序更具可读性。我认为这更多的是关于设计师的问题。
我有两个循环:
for( ... ) {
//...
for(...) {
if(baa) {
goto outer;
}
//statements of 2-loop
}
//statements of 1-loop
}
它工作正常,如果baa
具有非零值,则跳转到outer
没有循环 1 和 2 的运行状态的标签。但在之前,如果被调用return
,我需要做一些free()
独立goto outer
的调用:
if(a != NULL) free(a);
if(b != NULL) free(b);
但是如果我在这里,因为goto
,上面的代码不会被调用。
我需要执行以下操作:
goto outer; //if normally exited from two-loops, go to outer anyway.
outer: {
if(a != NULL) free(a);
if(b != NULL) free(b);
return ret;
}
是什么让这个函数变成了这样:
char* foo(void) {
char *ret = NULL;
for( ... ) {
//...
for(...) {
if(baa) {
ret = tmp_result;
goto outer;
}
//some statements of 2-loop
}
//some statements of 1-loop
}
goto outer;
outer: {
if(a != NULL) free(a);
if(b != NULL) free(b);
return ret;
}
}
我希望这很清楚。提前致谢。