Bana çok sorulan sorulardan biri de budur. Diyorlar ki, “yahu neden global değişkenlere varsayılan bir değer (tipik olarak sıfır değeri) atanıyor da yerel değişkenlere atanmıyor? Bu hak mı, adalet mi?”. Özellikle C# ve Java gibi içerisine değer atanmamış değişkenlerin kullanılmasına izin vermeyen dillerde çalışanlar yerel değişkenlerin otomatik olarak sıfırlanmamasından memnun değiller. Örneğin:
total += i; /* C ve C++’ta çöp değer, C# ve Java’da error! */
Sizce de yerel değişkenler derleyici tarafından sıfırlansaydı daha iyi olmaz mıydı?..
Aslında bu sorunun oldukça basit bir açıklaması var. Genel olarak statik ömürlü nesnelere (C ve C++’taki global ya da static yerel nesnelere, sınıfların static veri elemanlarına vs.) derleme aşamasında derleyici tarafından ilkdeğerleri verilebiliyor. Bu işlem derleme aşamasında yapıldığı için bir etkinlik sorununa yol açmıyor. Halbuki yerel değişkenler programın akışı değişkenin tanımlandığı yere geldiğinde (tipik olarak akış değişkenin tanımlandığı bloğa girdiğinde) yaratılıyorlar ve bloktan çıktığında yok ediliyorlar. İşte derleyicilerin yerel değişkenleri sıfırlaması bu nedenle bir verimlilik sorunu oluşturabilmektedir. Yani örneğin:
Burada derleyici yerel değişkeni yaratıp içerisine sıfır değerini makina komutlarıyla atamak zorunda. Fakat gördüğünüz gibi bu örnekte derleyicinin atadığı sıfır değeri daha sonra değiştirilmiş. O halde derleyici değişkeni sıfırlamış olsaydı burada gereksiz bir atama yapılmış olacaktı. Tabi siz de şimdi diyeceksiniz ki “öyleyse derleyici de her zaman değil, biz değişkene atama yapmamışsak onu sıfırlasın.” Ehm...Haklısınız ne diyeyim? Fakat benim de buna karşılık söyleyeceğim bir çift sözüm var:
1. Derleyicinin bunu yapması yine de verimsiz olur. Çünkü derleyici bazı durumlarda değişkeni farklı yerlerde defalarca sıfırlamak zorunda kalabilir. (Örneğin bir yerel değişkene if deyiminin doğru kısmında atama yapılmış, yanlış kısmında atama yapılmamış olsun. Böyle bir sürü durumun peşi sıra geldiğini düşünün.)
2. Ayrıca bunun gerçek anlamda programcıya bir faydası yok gibi gözüküyor. Programcının değer atamadığı bir yerel değişkeni yanlışlıkla kullandığını düşünelim. Bu durumda sıfırlamanın programcıya ne faydası olacak? Halbuki böylesi durumalrda derleyicinin error (C# ve Java’da) ya da uyarı mesajlarıyla (C ve C++’ta) programcıyı durumdan haberdar etmesi daha uygu değil midir? (Dışsal bağlama (external linkage) özelliğine sahip statik ömürlü nesneler için böyle bir uyarı mekanizmasını ayarlamak mümkün gözükmüyor.)
 Bazı dillerde statik ömürlü nesnelere verilen ilkdeğerlerin sabit ifadesi olması zorunlu değil. Bu tür dillerde ilkdeğerleme işlemi derleyicilerin başlangıç kodları (startup code) tarafından yapılıyor.
 Semantik olarak böyle olsa da pek çok derleyici (çeşitli, nedenlerle) tüm yerel değişkenleri akış fonksiyona girdiğinde yaratıyor, çıktığında yok ediyor.