Sobes.tech
Junior

C++'ta küresel ve yerel değişkenler ne zaman ve ne kadar süreyle var olur?

sobes.tech yapay zeka

AI'dan gelen yanıt

Küresel Değişkenler

  • Varoluş Süresi: Programmanın başlatılmasından bitişine kadar.
  • Depolama Yeri: Genellikle statik bellek alanında (.data veya .bss bölümü yürütülebilir dosyada).
  • Başlatma:
    • Dosya seviyesinde tanımlanan, karmaşık yapıcıları olan statik olmayan küresel değişkenler main() çağrılmadan önce başlatılır.
    • Sıfıra ayarlanmış küresel değişkenler (örneğin, int i = 0;) de main()den önce başlatılır.
    • const ile tanımlanan veya statik ömürlü değişkenler program yüklenirken başlatılır.
  • Erişilebilirlik: Tüm fonksiyonlarda görünürler ve kapsam içindedirler.

Yerel Değişkenler

  • Varoluş Süresi: Bir kod bloğu içinde (fonksiyon, döngü, koşul vb.) tanımlandığı andan çıkışına kadar.
  • Depolama Yeri: Genellikle yığında (otomatik değişkenler için). Statik yerel değişkenler statik bellek alanında saklanır.
  • Başlatma:
    • Otomatik yerel değişkenler varsayılan olarak başlatılmaz ("saçma" içerirler). Açıkça başlatılmaları gerekir.
    • Statik yerel değişkenler ilk tanımlandıkları zaman bir kez başlatılır.
  • Erişilebilirlik: Sadece tanımlandıkları kod bloğu içinde görünürler.

Örnekler

// Küresel değişken
int global_variable = 10;

void some_function() {
    // Yerel değişken (otomatik)
    int local_variable_1; // Başlatılmamış

    // Yerel değişken (otomatik) ve başlatma
    int local_variable_2 = 20;

    // Statik yerel değişken
    static int static_local_variable = 30; // Bir kez başlatılır

    // Küresel değişkene erişim
    global_variable++;

    // Yerel değişkenlere erişim
    local_variable_1 = global_variable;
    static_local_variable++;

    // some_function()'dan çıktıktan sonra, local_variable_1 ve local_variable_2 var olmamaya devam eder
    // static_local_variable ise var olmaya devam eder ve değerini korur
}

int main() {
    some_function();
    some_function(); // static_local_variable değeri korudu
    // Küresel değişken burada erişilebilir
    // local_variable_1 ve local_variable_2 erişilemez

    return 0;
}

Karşılaştırma Tablosu

Özellik Küresel Değişkenler Yerel Değişkenler (otomatik) Statik Yerel Değişkenler
Varoluş Süresi Program başlatıldığından bitişine kadar Tanımlandığı andan çıkışına kadar Tanımlandığı ilk andan program sonuna kadar
Depolama Yeri Statik bellek alanı (.data, .bss) Yığın (stack) Statik bellek alanı (.data, .bss)
Başlatma main() çağrılmadan veya program yüklenirken Varsayılan olarak başlatılmaz. Açıkça başlatılmalı İlk tanımlamada bir kez başlatılır
Erişilebilirlik Dosya kapsamı içinde her yerde Sadece tanımlandığı blok içinde Sadece tanımlandığı blok içinde