C’de const ve static : Değişkenler Ne Zaman Sabitlenir?

C'de const ve static
C programlama dilinde C’de const ve static anahtar kelimeleri,
değişkenlerin davranışını doğrudan etkiler. Ancak bu iki kavram sıkça karıştırılır.
Bu yazıda, C’de const ve static kullanımını; bellek ömrü, scope (kapsam) ve
derleme zamanı açısından net örneklerle inceleyeceğiz.

C’de const Nedir? Değeri mi, Değişkeni mi Sabitler?

C'de const ve static
C’de const ve static

const Anahtar Kelimesinin Temel Mantığı

C’de const ve static en çok karıştırılan iki kavramdır. Const:  bir değişkenin değerinin değiştirilmesini engeller.
Yani const, değişkenin kendisini değil; erişim yoluyla değiştirilememesini
garanti altına alır.


const int x = 10;
x = 20; // Derleme hatası

Burada x değişkeni bellekte yer kaplar ancak yazma işlemi yasaktır.
Bu yüzden const değişkenler runtime sırasında bellekte bulunur.

const Derleme Zamanında mı Sabitlenir?

Yaygın bir yanılgı, const değişkenlerin derleme zamanında sabitlendiğidir.
Aslında bu her zaman doğru değildir.


int getValue() {
    return 5;
}

const int y = getValue(); // Geçerli

Bu örnekte y, derleme zamanında değil, runtime sırasında
atanır. Dolayısıyla const, C’de compile-time constant anlamına gelmez.

C’de static Nedir? Bellek Ömrünü Nasıl Değiştirir?

C'de cons ve static
C’de cons ve static

Fonksiyon İçinde static Değişkenler

C’de const ve static anahtar kelimelerinin ikincisi olan static; değişkenin ömür süresini değiştirir.
Fonksiyon içinde tanımlanan static değişkenler, yalnızca bir kez oluşturulur
ve program sonlanana kadar bellekte kalır.


void counter() {
    static int count = 0;
    count++;
    printf("%d\n", count);
}

Bu fonksiyon her çağrıldığında count sıfırlanmaz.
Çünkü static değişkenler stack yerine data segmentinde tutulur.

Global static Değişkenler ve Scope

C'de const ve static
C’de const ve static

Global alanda tanımlanan static değişkenler, yalnızca tanımlandıkları dosyada
erişilebilir olur.


static int globalCounter = 0;

Bu kullanım, modüler programlamada büyük avantaj sağlar.
Peki sizce bu yaklaşım, büyük projelerde hata riskini azaltır mı?

const ve static Birlikte Kullanılır mı?

const static Kombinasyonu Ne Anlama Gelir?

Evet, const ve static birlikte kullanılabilir.
Bu durumda değişken:

  • Program boyunca bellekte kalır (static)
  • Değeri değiştirilemez (const)

static const int MAX_SIZE = 100;

Bu tür tanımlar, sabit konfigürasyon değerleri için idealdir.
Özellikle embedded sistemlerde sıkça tercih edilir.

const static Ne Zaman Sabitlenir?

static const değişkenler, derleme zamanında değil;
program başlatılırken initialize edilir.
Ancak değerleri sonradan değiştirilemez.

const ve static Arasındaki Temel Farklar

Özellikconststatic
Değer Değiştirilebilir mi?HayırEvet
Bellek ÖmrüNormal değişken gibiProgram boyunca
Scope EtkisiYokVar
Derleme Zamanı Sabiti mi?HayırHayır

Bu tabloyu incelediğinizde, const ve static’in tamamen farklı problemleri çözdüğünü
fark edebilirsiniz. Siz projelerinizde hangisini daha sık kullanıyorsunuz?

SSS (FAQ)

C’de const değişken gerçekten sabit midir?

Hayır. const, değişkenin değerinin değiştirilmesini engeller; ancak bellekte yer kaplamaya devam eder.

static değişken neden stack’te tutulmaz?

Çünkü static değişkenlerin ömrü fonksiyon çağrılarıyla sınırlı değildir; program boyunca yaşar.

const static mi yoksa #define mı tercih edilmeli?

const static, tip güvenliği sağladığı için modern C kodlarında daha güvenlidir.

static global değişkenler neden kullanılır?

Dosya bazlı encapsulation sağlayarak isim çakışmalarını önler.

Kaynakça

 

İlgili Yazılar