0
我需要一些想法來使這個程序更具可讀性。我認爲這更多的是關於設計師的問題。如何在循環之後使用goto和run語句來取消兩個循環?
我有兩個循環:
for(...) {
//...
for(...) {
if(baa) {
goto outer;
}
//statements of 2-loop
}
//statements of 1-loop
}
它工作正常,如果baa
具有非零值,跳轉到outer
標籤無環1和2的運行stataments但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;
}
}
我希望這是顯而易見的。提前致謝。
在循環外部不需要'goto outer;','outer:'-labelled語句在退出循環後仍然執行。 –
@DanielFischer:真的。我忘了它!非常感謝。發佈它作爲答案,我會接受 – Jack