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
#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
#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
int next_id(void) {
____ int id = 0;
return ++id;
}
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.