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 static değ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 static yapmak stack taşmasını önler ama RAM'i kalıcı olarak ayırır.
  • ISR ile paylaşılan static değişken ayrıca volatile olmalıdır.
  1. C dilinde volatile anahtar kelimesi ne işe yarar?OrtaC ProgramlamaEmbedded
  2. Bir yazmaçtaki belirli bir biti set, clear ve toggle eden C kodunu yazın.KolayC ProgramlamaEmbedded
  3. Stack ile heap arasındaki fark nedir? Gömülü sistemlerde dinamik bellek kullanımından neden kaçınılır?OrtaC ProgramlamaEmbedded
  4. Endianness nedir? Little-endian ile big-endian farkı nedir?KolayC ProgramlamaEmbedded
  5. Bit field nedir? Donanım register'larına erişimde bit field mi yoksa bit maskesi mi kullanılmalı?OrtaC ProgramlamaEmbedded
  6. Fonksiyon pointer'ları ve callback tabloları gömülü sistemlerde nasıl kullanılır? Bir state machine örneği verin.OrtaC ProgramlamaEmbedded

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle