crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
Const ve Volatile: Değişkenlere Karakter Kazandırmak
Bu iki anahtar kelime, derleyicinin kodunuz üzerinde yapacağı optimizasyonları ve değişkenin yaşam döngüsündeki kısıtlamaları belirler.
1. const: Değişmezlik ve Güvenlik
const anahtar kelimesi, bir değişkenin değerinin ilk atamadan sonra bir daha asla değiştirilemeyeceğini garanti eder. Kodda yanlışlıkla bu değeri değiştirmeye çalışırsanız derleyici hata verecektir.
[]Sabitler: Pi sayısı gibi değişmeyen değerleri korur.
[]Fonksiyon Güvenliği: Bir fonksiyona parametre geçerken const kullanırsanız, fonksiyonun o veriyi kazara bozmamasını sağlarsınız.
C++:
const double PI = 3.14159;
// PI = 3.14; // HATA! Salt okunur (read-only) değişken.
void Yazdir(const string& mesaj) {
// mesaj = "Yeni mesaj"; // HATA! const referans değiştirilemez.
cout << mesaj;
}
2. volatile: Derleyiciye "Müdahale Etme" Demek
volatile, derleyicinin o değişken üzerinde hiçbir optimizasyon yapmamasını sağlar. Normalde derleyiciler, kodun hızlanması için değişmediğini düşündükleri değişkenleri işlemci yazmaçlarına (register) kopyalar. Ancak bazı değişkenler, programın dışından (donanım veya başka bir thread) aniden değişebilir.
Kullanım Alanları:
[]Gömülü Sistemler: Bir sensörden gelen veri veya bir butonun durumu.
[]Sinyal İşleyiciler (Signal Handlers): İşletim sisteminden gelen kesmeler.- Paylaşımlı Bellek: Çoklu iş parçacıklarında (multi-threading) dışarıdan müdahale edilen bayraklar.
C++:
volatile int sensorVerisi = 0;
while(sensorVerisi == 0) {
// Derleyici burayı "sonsuz döngü" sanıp optimize edebilir.
// 'volatile' sayesinde her seferinde bellekten (RAM) okumaya zorlanır.
}
3. Karşılaştırma Tablosu
| Özellik | const | volatile |
|---|---|---|
| Amacı | Veriyi yazmaya karşı korumak. | Verinin dışarıdan değişebileceğini bildirmek. |
| Optimizasyon | Derleyici daha agresif optimize edebilir. | Derleyici optimizasyon yapamaz. |
| Hata Denetimi | Yazma girişimi derleme hatası verir. | Hata vermez, sadece bellek davranışını değiştirir. |
4. const volatile (İlginç Bir Birliktelik)
Bir değişken hem const hem de volatile olabilir mi? Evet!
Bu şu anlama gelir: "Ben (yazılım tarafı) bu değişkeni değiştiremem (const), ancak bu değer donanım tarafından her an değiştirilebilir (volatile), bu yüzden her seferinde gerçek adresten oku."
C++:
// Salt okunur bir donanım yazmacı (Hardware Register)
extern const volatile int saat_sinyali;
Sonuç
const kullanmak bir programcılık disiplinidir ve kodun okunabilirliğini artırır. volatile ise donanım seviyesine indiğinizde veya çoklu iş parçacıklarıyla uğraştığınızda hayat kurtarıcı bir araçtır. Bu iki niteleyiciyi doğru kullanmak, sizi "nedenini bulamadığınız" çalışma zamanı hatalarından korur.