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", ¥i_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.