Function Local Static: Birden Fazla Çağrıda Başlatma Davranışı

C++'da bir fonksiyon içinde static anahtar kelimesiyle tanımlanan değişkenler ilk çağrıda başlatılır ve bellekte kalır. Sonraki çağrılarda başlatılmaz; önceki değeri aynen tutarlar. Bu davranış, bir sayacı veya durumu korumanız gerektiğinde çok işe yarar.

Bu nasıl çalışır? Fonksiyon her çağrıldığında program akışı static satırını geçer, ancak başlatma kodu (örneğin int x = 0;) yalnızca ilk kez çalışır. Bellek adresi değişmez; değişken program boyunca aynı yerde kalır.

Aşağıdaki örneği adım adım inceleyelim:

1#include <iostream>
2using namespace std;
3
4void sayac() {
5static int cagri_sayisi = 0;
6cagri_sayisi++;
7cout << "Fonksiyon " << cagri_sayisi << ". kez çağrıldı" << endl;
8}
9
10int main() {
11sayac(); // 1. kez çağrı
12sayac(); // 2. kez çağrı
13sayac(); // 3. kez çağrı
14return 0;
15}

Beklenen çıktı:

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1Fonksiyon 1. kez çağrıldı
2Fonksiyon 2. kez çağrıldı
3Fonksiyon 3. kez çağrıldı

İlk çağrıda cagri_sayisi 0 olarak başlatılır, sonra 1 artırılır ve 1 yazdırılır. İkinci çağrıda başlatma atlanır; değişken hala 1'dir, 1 artırılır ve 2 yazdırılır. Üçüncü çağrıda da aynı mantık: 2'den 3'e çıkar.

Eğer static olmasaydı:

1void sayac_hatasiz() {
2int cagri_sayisi = 0; // static YOK
3cagri_sayisi++;
4cout << "Fonksiyon " << cagri_sayisi << ". kez çağrıldı" << endl;
5}

Her çağrıda çıktı "Fonksiyon 1. kez çağrıldı" olurdu; değişken her seferinde sıfırlanır.

Pratik kullanım: Fonksiyon kaç kez çağrıldığını tutmak, geçici bir durum korumak ya da başlatma maliyetli ise onu bir kez yapmak. Dikkat: static değişkenler thread-safe değildir; çok işlemli ortamda sorun yaratabilir.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz