Bir döngüde kullanılan koşullu tür, bir derleyicinin daha iyi veya daha kötü şekilde gerçekleştirebileceği optimizasyon türlerini sınırlayabilir. Örneğin, verilenler:
uint16_t n = ...;
for (uint16_t i=1; i<=n; i++)
... [loop doesn't modify i]
Bir derleyici yukarıdaki durum n'inci geçiş döngü sonra çıkmak için döngüye neden gerektiğini varsayalım olabilir sürece n kudretini 65535 ve ben n aşarak dışında bazı moda döngü kudreti çıkışında. Bu koşullar geçerliyse, derleyici, yukarıdaki koşuldan başka bir şey çıkmasına neden olana kadar döngünün çalışmasına neden olacak kod üretmelidir.
Bunun yerine döngü şöyle yazıldıysa:
uint16_t n = ...;
for (uint16_t ctr=0; ctr<n; ctr++)
{
uint16_t i = ctr+1;
... [loop doesn't modify ctr]
}
bir derleyici, döngünün hiçbir zaman n'den fazla yürütme gerektirmeyeceğini güvenli bir şekilde varsayabilir ve böylece daha verimli kod üretebilir.
İmzalı türlerle herhangi bir taşmanın kötü sonuçlar doğurabileceğini unutmayın. Verilen:
int total=0;
int start,lim,mult; // Initialize values somehow...
for (int i=start; i<=lim; i++)
total+=i*mult;
Bir derleyici bunu şöyle yeniden yazabilir:
int total=0;
int start,lim,mult; // Initialize values somehow...
int loop_top = lim*mult;
for (int i=start; i<=loop_top; i+=mult)
total+=i;
Hesaplamalarda taşma olmazsa böyle bir döngü orijinaliyle aynı şekilde davranır, ancak tamsayı taşmasının normalde tutarlı sarma semantiğine sahip olacağı donanım platformlarında bile sonsuza kadar çalışabilir.