Standart C Programlama Dili


4.3.3. static Değişkenler Ve Fonksiyonlar

Kullanıldığı yere bağlı olarak static anahtar sözcüğünün iki değişik anlamı vardır. Blok içinde, static “kalıcı” anlamına gelir. Yani, blok içinde değişkenlerin tanımlarının önüne static anahtar sözcüğü kullanılırsa, bu değişkenlerin değerleri blok sona erdiğinde yok olmazlar. Blok dışına çıkıldığında değişkenler erişilmez hale gelir, fakat blok tekrar işletilirse, blok sona erdiği zamanki değerleriyle programın yürütülmesine katılırlar. Diğer bir deyişle, bu bağlamda static auto’nun tersidir. Fonksiyon parametreleri olarak kullanılan değişkenler static olamaz. Örnek:

void fark (void)
{
  static int deger;
  int        yeni_deger;
  scanf("%d", &yeni_deger);
  printf("Bu deger son seferden %d birim farklidir.\n",
    deger - yeni_deger);
  deger = yeni_deger;
}

Bu fonksiyon girilen değerle daha önce en son girilen değer arasındaki farkı yazar. İlk çağrıda eski değerin sıfır olduğunu varsayar. (Bütün static değişkenlerin sıfıra ilklendiği varsayılır.) deger adı verilen değişken, kontrol başka fonksiyonlara dönüp tekrar buraya geldiğinde değerini sürdürür.

Bir fonksiyon veya küresel bir değişken tanımının önüne yazıldığı zaman, static “gizli” anlamına gelir. Yani, bu fonksiyon veya değişken (ayrıca derlenmiş yada derlenecek) başka dosyalara tamamen yabancı olacaktır; diğer bir deyişle, bu dosyalar static değişken veya fonksiyona erişemeyeceklerdir. Bu kısmın başındaki örnekte, z ve fonk_2’yi static yapalım:

int fonk_1 (...)
{  fonk_1’in gövdesi  }

static double z;

static int fonk_2 (...)
{  fonk_2’in gövdesi  }

int main (...)
{  main’in gövdesi  }

Şimdi, eğer isterlerse, bu dosyadaki fonksiyonlar z ve fonk_2’ye erişebilirler, ancak başka kaynak dosyalardaki fonksiyonlar için bu olanaksız olacaktır.