理想的な方法は、コードをリファクタリングして、このような複雑なネストされたループ構造が不要になるようにすることです。コードの残りの部分がどのように見えるかに応じて、b
ループc
全体ではなくても、a
ループが個々の関数になる候補になる場合があります。
ループのように見え、隣接する範囲b
を反復処理するので、それらを組み合わせて、ループのネストを少し減らしてみませんか?c
for (int a = 1; a <= 100; a++) //loop a (main loop)
{
int count = 1000;
while (count <= 3000) // combined loops 'b' and 'c'
{
if (count <= 2000)
{
// Old loop 'b' code
if (b == 1555)
goto fullbreak;
}
else
{
// Old loop 'c' code
...
}
count++;
}
}
fullbreak:
の代わりに条件変数を使用することもできますgoto
。古いループから抜け出し、古いb
ループを処理したい場合は、古いループコード内にc
設定するだけです。count = 2001
b
理想的には、少なくともこれをより次のようなものにリファクタリングできるでしょう。
for (int a = 1; a <= 100; a++) //loop a (main loop)
{
if (process_inner_loop(pass, required, args))
break;
}
ここで、関数はprocess_inner_loop
元の2つのループをラップし、囲んでいるループから抜け出したい場合はゼロ以外を返します。これで、変数または条件変数を使用する代わりに、単純にを使用goto
できますreturn 1;
。