C Programlama #18 | static, Global Değişken ve Kapsam: Sayaç Neden Hep 1?

Kapsam ve Depolama Sınıfları

Eğitmen: Dr. Süleyman Burak ÇELİK

Ziyaretçi sayacı üç kez çağrılıyor ama her seferinde 1 yazıyor. On sekizinci derste her değişkenin iki özelliğine bakıyoruz: ne kadar yaşadığı (depolama süresi) ve programın neresinde kullanılabildiği (kapsam). Yerel değişkenlerin depolama süresi otomatiktir: lldb hata ayıklayıcısıyla printf satırında üç kez durunca sayaç her çağrıda 1 ve üçü de aynı yığın adresinde çıkıyor. Tek bir kelime, static, sayacı 1, 2, 3 diye saydırıyor; static int sayac = 0 satırının her çağrıda çalışmadığını, ilk değerin yalnızca bir kez verildiğini görüyoruz. Hata ayıklayıcı, static sayacın adresinin yığında değil programın veri bölümünde (__DATA) olduğunu gösteriyor; kapsamı ise yine yalnızca ziyaret fonksiyonu. Global bir değişkeni ilgisiz bir fonksiyonun da değiştirebildiğini (bakiye 70'ten 0'a) ve aynı işin parametre ile return kullanılarak nasıl yazıldığını (en az yetki ilkesi) gösteriyoruz. İlk değer verilmeyen global ve static değişkenler 0 olur; yerel değişkenin değeri ise belirsizdir: gcc ile derlenen program 1, clang ile derlenen program anlamsız bir negatif sayı yazdı ve iki derleyici de -Wall ile uyardı. Blok kapsamında döngüden sonra kullanılan değişken için gcc'nin "undeclared" hatasını, iç içe bloklarda aynı adın dıştakini gölgelediğini ve bunu -Wall'ın değil -Wshadow seçeneğinin uyardığını görüyoruz. Son olarak C'nin dört kapsamı (dosya, blok, fonksiyon prototipi, fonksiyon) ve depolama süresi ile kapsamın ayrı şeyler olduğu. Ekrandaki her çıktı, kodun gerçekten derlenip çalıştırılmasından geliyor. Bu derste: 1. Yerel değişken otomatiktir: her çağrıda yeniden doğar (lldb ile gerçek adresler) 2. static yerel değişken: bir kez ilk değer alır, değerini korur 3. static değişken yığında değil, veri bölümünde 4. Global değişkenin yan etkisi; parametre ve return ile en az yetki 5. Blok kapsamı, gölgeleme (-Wshadow) ve C'nin dört kapsamı Bölümler: 0:00 Depolama süresi ve kapsam 0:15 Sayaç neden hep 1? 0:36 Yerel değişken: otomatik depolama süresi 1:13 static yerel değişken 2:02 Global değişken ve en az yetki ilkesi 3:09 Blok kapsamı ve gölgeleme 3:54 C'de dört kapsam 4:28 Bugünün dört kuralı 4:56 Sonraki ders: özyineleme Kaynak kitap: Paul Deitel, Harvey Deitel — C How to Program, 9. baskı (2022), §5.12–5.13. Konu sırası ve kavramlar kaynak kitaptan izlenir; anlatım, örnekler ve ekranlar özgündür. Hedef kitle: C'ye yeni başlayan tüm mühendislik ve bilgisayar/yazılım öğrencileri. Ön koşul: C Programlama #01–#17.

Bu videoyu izlemek için Premium üyelik gerekir.