C'de static anahtar kelimesinin farklı kullanımları nelerdir?
Cevap
static kullanıldığı yere göre iki farklı şeyi değiştirir: ömür (storage duration) ve görünürlük (linkage).
1. Fonksiyon içindeki yerel değişken
Değişken stack'te değil, .data/.bss bölümünde yaşar; değeri çağrılar arasında korunur. İlk değer ataması bir kez, program başlarken yapılır.
uint32_t next_id(void) {
static uint32_t id = 0;
return ++id;
}2. Dosya kapsamındaki global değişken
Internal linkage verir: değişken yalnızca o .c dosyasından görülebilir. Modüller arası isim çakışmasını ve istenmeyen erişimi önler; C'de "private" kapsülleme budur.
static uint8_t rx_buf[64]; /* sadece uart.c görür */3. Fonksiyon
Fonksiyonu dosyaya özel yapar. Derleyici fonksiyonun başka yerden çağrılmadığını bildiği için agresif inline yapabilir veya kullanılmıyorsa tamamen silebilir.
static void uart_flush(void) { /* ... */ }4. Dizi parametresinde (C99)
Çağıranın en az N elemanlık geçerli bir dizi geçireceğini belirtir; optimizasyon ipucudur.
void crc(const uint8_t data[static 4]);Gömülü sistemlerde dikkat
- Fonksiyon içi
staticdeğişken reentrant değildir: aynı fonksiyon hem ISR'dan hem ana döngüden veya iki RTOS task'ından çağrılırsa yarış oluşur. - Büyük tamponları fonksiyon içinde
staticyapmak stack taşmasını önler ama RAM'i kalıcı olarak ayırır. - ISR ile paylaşılan
staticdeğişken ayrıcavolatileolmalıdır.
İlgili C Programlama soruları
- C dilinde volatile anahtar kelimesi ne işe yarar?
- Bir yazmaçtaki belirli bir biti set, clear ve toggle eden C kodunu yazın.
- Stack ile heap arasındaki fark nedir? Gömülü sistemlerde dinamik bellek kullanımından neden kaçınılır?
- Endianness nedir? Little-endian ile big-endian farkı nedir?
- Bit field nedir? Donanım register'larına erişimde bit field mi yoksa bit maskesi mi kullanılmalı?
- Fonksiyon pointer'ları ve callback tabloları gömülü sistemlerde nasıl kullanılır? Bir state machine örneği verin.
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.