このプログラムをもっと読みやすくするためのアイデアが必要です。デザイナーの方が他よりも問題だと思います。
私には2つのループがあります:
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;
}
}
これが明確であることを願っています。前もって感謝します。