Bu gibi görünen kod (gösterilen tüm kullanımlar gösteriliyor):Derleyici, bir iç döngüden kaçmayı optimize eder mi?
bool done = false;
for(int i = 0; i < big; i++)
{
...
for(int j = 0; j < wow; j++)
{
...
if(foo(i,j))
{
done = true;
break;
}
...
}
if(done) break;
...
}
herhangi bir derleyici bunu dönüştürür:
for(int i = 0; i < big; i++)
{
...
for(int j = 0; j < wow; j++)
{
...
if(foo(i,j))
goto __done; // same as a labeled break if we had it
...
}
...
}
__done:;
Not:if(done)break;
atlanır ve ölü kod olarak kaldırılır, ayrıca done
'ün tamamen kaldırılmasıyla da ilgilenirim.
, böyle iki alt çizgi ile başlar tüm simgeleri tanımlamak gerekir; Bu semboller saklıdır. –
Sembol, bir optimizasyon geçişinin sonucudur, e.i. derleyici tarafından oluşturulur. Bu ismi kullandım * çünkü * rezerve edilmiş/dahili bir isim gösteriyor. – BCS
Ve soru: neden bu bir işlevde sıkışmış değil?Bir 'return' sonra kullanabilirsiniz;) –