Standart C Programlama Dili


2.7. for Deyimi Ve Virgül İşleci

for deyimi, for anahtar sözcüğü, arkasında parantez içinde iki noktalı virgülle ayrılmış üç ifade ve ondan sonra gelen bir deyimden oluşur. İfadelerden herhangi biri var olmayabilir, ancak noktalı virgüller bulunmalıdır. for deyiminin nasıl işlediğini anlatmanın en iyi yolu, eşdeğer bir while deyimi ile onu ifade etmektir. Şimdi, eğer

for (ifade_1opt ; ifade_2opt ; ifade_3opt )
  deyim

şeklinde bir deyimimiz varsa,

ifade_1;
while (ifade_2) {
  deyim
  ifade_3;
}

deyimi, for deyimi ile aynı işi yapacaktır. Eğer for deyimindeki ifade_2 boşsa, sürekli olarak doğru olduğu şeklinde yorumlanacak ve sonsuz bir döngünüz olacaktır. İfade_1’in döngüyü kontrol eden değişkenleri ilklemek için; ifade_2’nin döngüyü devam ettirmek için gereken koşulları belirlemede; ifade_3’ün de döngü içindeki bazı değişkenlerin değerlerini değiştirmede kullanılacağına dikkat edin. Örnek:

for (i=0; i<n; i++) {
  dizi[i] = 0;
  printf("Dizinin %d nolu elemanina 0 atanmistir.\n", i);
}

Bu, basitçe, dizi dizisinin ilk n elemanına sıfır atar ve n sayıda satır görüntüler. for deyimine bir başka örnek ise şöyledir:

for (bosluklar=0; getchar()==' '; bosluklar++)
  ;

Bu deyim girdi akışındaki boşlukları sayar. Bu durumda, parantez içine alınmış olan ifadelerin gereken her şeyi yaptığına ve tekrarlanan deyimin boş deyim olduğuna dikkat ediniz. for’un deyiminin boş olduğunu vurgulamak için, noktalı virgül ikinci satıra yazılmıştır. Sık yapılan hatalardan bir tanesi de for deyiminin sağ parantezinin hemen arkasına noktalı virgül koymak, böylece deyimi tek bir seferde yürütülecek normal bir deyim haline getirmektir.

Bazen, for deyiminde ifade_1 ve ifade_3 adını verdiğimiz yerlerde birden fazla ifadenin bulunması daha uygun olabilir. Örneğin, iki tane sayacımızın bulunduğunu ve döngüden herhangi birisinin sıfır olduğu zaman çıkmamızın gerektiği bir durumu düşünün. Bunu yapmanın başka yöntemleri de vardır, ama aşağıdaki deyim en iyilerindendir:

for ( ; sayac_1 && sayac_2; sayac_1--, sayac_2--) {
  
}

Bu, virgül işlecinin en çok kullanıldığı yerlerden biridir. Gördüğünüz gibi, virgül işleci iki ifadeden tek bir ifade oluşturmaya yarar. Her zaman ikinci işlenenden önce ilk işleneni hesaplar ve soldan sağa birleşir. Sonucu ise sadece ikinci ifadenin değeridir. Sonucun tipi de ikinci ifadenin tipiyle aynıdır. Virgül işleci, C’nin işleçleri arasında en düşük önceliğe sahiptir.

Virgül karakterinin, C dilinde başka amaçlar için de kullanıldığına dikkat ediniz. Bildirimlerde değişken isimlerini ayırmak buna bir örnektir. Bu durumlarda, söz konusu olanın bir ayırıcı değil de, bir işleç olduğunu belirtmek için virgül ifadesi parantezler içine alınmalıdır.

C standardında, ifade_1’in olduğu yerde değişken tanımı da yapılabilir. Tanımlanan değişkenler sadece for döngüsü içinde geçerlidir. Döngü bittiğinde kaybolurlar. Örneğin, yukarıdaki ilk örnekte, eğer i değişkenine for döngüsü sona erdikten sonra ihtiyacımız yoksa, şu şekilde de yazılabilir:

for (int i=0; i<n; i++) {
  dizi[i] = 0;
  printf("Dizinin %d nolu elemanina 0 atanmistir.\n", i);
}