CodeBlanks Logo Icon CodeBlanks

static

  • C kursu
  • Orta seviye
  • Ders 61/116
  • 5 dk

static ile dosya-yerel değişken ve fonksiyon öğrenirsin.

static anahtar sözcüğü

static iki farklı anlama gelir. Dosya düzeyinde (fonksiyon dışında) yazıldığında değişken ya da fonksiyon dosya-yerel olur; başka .c dosyasından extern ile bile görünmez. Fonksiyon içinde yazıldığında değişken ömrü program sonuna uzar ama kapsam aynı kalır.

Örnek: static int internal_counter = 0; bir .c dosyasında yazılırsa yalnızca o dosya görür. Bu, modülün uygulama detayını gizlemek için kullanılır; başlıkta yalnızca genel API yer alır, iç yardımcılar static olur. Bu tekniğe internal linkage denir.

Fonksiyon içinde static

Fonksiyon içinde static int calls = 0; yazarsan calls değişkeni fonksiyon her çağrıldığında değerini korur. İlk çağrıda sıfıra başlatılır; sonraki çağrılarda eski değer devam eder. Normal yerel değişken her çağrıda yeniden başlatılır.

Örnek: int next_id(void) { static int id = 0; return ++id; }. Her çağrı bir önceki sayının bir fazlasını döndürür. Bu desen, sayaç ve önbellek için uygundur. Ancak thread-safe değildir; çok iş parçacıklı programlarda dikkatli kullan. Ömür program boyu olsa da kapsam fonksiyon içindedir; dışarıdan erişilemez.

Uygulama static sayaç yaz

int next_id(void) fonksiyonu yaz; içinde static int id = 0; ve return ++id; olsun. int main(void) içine printf("%d \n", next_id()); ve printf("%d\n", next_id()); ekle. <stdio.h> başlığını unutma.

Başlangıç kodu

main.c
#include <stdio.h>

// next_id: kalıcı sayaç ve artış

int main(void) {
    // next_id'yi iki kez çağır ve yazdır
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>

int next_id(void) {
    static int id = 0;
    return ++id;
}

int main(void) {
    printf("%d \n", next_id());
    printf("%d\n", next_id());
    return 0;
}

Beklenen çıktı

1 
2

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 static kullanımlarını eşle

Kavram Anlamı
Dosya düzeyinde static Internal linkage
Fonksiyon içinde static Kalıcı ömür
extern Başka dosyadan paylaşım
Header Genel API

2 Sayaç fonksiyonunu tamamla

Soru
int next_id(void) {
    ____ int id = 0;
    return ++id;
}
Cevap
int next_id(void) {
    static int id = 0;
    return ++id;
}

Açıklama: static int id = 0; değeri çağrılar arasında korur.

3 Dosya düzeyinde static değişken ne yapar?

  • Başka dosyadan görünür olur
  • Yalnızca tanımlandığı dosyada görünür Doğru cevap
  • Otomatik sıfırlanır
  • Program boyu ömür verir

Açıklama: Dosya düzeyinde static internal linkage verir.

Orta seviye bölümündeki tüm dersler