Konu Tarihi: Global ve statik değişkenler, C dilinde fonksiyonların yerel bağlamının dışında veri saklamak için ortaya çıkmıştır. Otomatik ön başlatma ve bunların yürütülebilir dosyada özel bölümlerde yerleştirilmesi, programın çalışmasını optimize eder, ancak bu, anlaşılamayan bir davrana yol açabilir.
Sorun: Global ve statik değişkenlerin C'de ya belirli bir değerle ya da otomatik olarak sıfırlarla (Sıfır Başlatma) başlatıldığını bilmek önemlidir. Başlatma, main'in başlamasından önce gerçekleşir, bu da başlatılmamış verilere erişim riskini azaltır, ancak belirli koşullar altında, modüllerin başlatılması ve yüklenme sırası ile ilgili beklenmeyen bağımlılıklar oluşturabilir.
Çözüm:
Kod örneği:
#include <stdio.h> static int stat_var; int glob_var = 42; int main() { printf("statik: %d, global: %d ", stat_var, glob_var); }
Anahtar özellikler:
1. Statik değişkenlerin örtülü sıfırlanmasına güvenilebilir mi ve bu güvenli bir uygulama sayılabilir mi?
Teknik olarak çalışır, ancak büyük projelerde değişkenleri açıkça başlatmak, okunabilirlik ve derleyiciler/linker'daki olası değişiklikleri önlemek açısından daha iyidir.
2. Eğer bir statik değişken dış bir fonksiyonda başlatılmadan tanımlanırsa sonuç ne olur?
Yine de 0 ile başlatılacaktır: static int value; çalıştırıldığında her zaman 0'dır.
3. Başlatıcı ile tanımlanan bir global değişken, ayrı bir izole modülde tanımlandığında ne zaman başlatılır?
Başlatma, main'in çağrısından önce gerçekleşir, ancak farklı modüller arasında standart, bu tür değişkenlerin başlatılma sırasını garanti etmez, bu da diğer modülün yapıcısında başlatılmamış verilere erişim yapma olasılığını artırır.
Bir geliştirici, her zaman açıkça başlatılacaklarını varsayarak, ortak durumu saklamak için statik değişkenler tanımladı.
Artılar:
Eksiler:
Gözden geçirme sonrasında, değişkenler tanımlanma aşamasında açıkça başlatıldı.
Artılar:
Eksiler: