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. constile tanımlanan veya statik ömürlü değişkenler program yüklenirken başlatılır.
- Dosya seviyesinde tanımlanan, karmaşık yapıcıları olan statik olmayan küresel değişkenler
- 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 |