ProgramlamaGömülü C Geliştirici

C dilinde değişkenlerin kapsamıyla ilgili ince ayrıntılardan bahsedin. Kapsam hataları, kodun kararlılığı ve okunabilirliği üzerinde nasıl bir etki yapar?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap

C dilinde değişkenlerin farklı kapsamları olabilir: yerel (blok içinde), küresel (tüm dosyada) ve dosya içindeki kapsam (static). Kapsamların doğru yönetimi, işleyişin tahmin edilebilirliği ve isim çakışmalarını önlemek için önemlidir.

Küresel Değişkenler

Tüm dosyanın fonksiyonlarında görünür, extern ile tanımlanmışsa tüm projede de görünür.

Yerel Değişkenler

Bloka (örneğin, bir fonksiyon veya döngü) girişte oluşturulurlar. Tanım bloklarının dışındaki alanlarda görünmezler.

Dosya için Statik Değişkenler

static int foo; — sadece mevcut dosya için geçerlidir.

Örnek:

static int counter = 0; // Sadece dosya içinde void increment() { int temp = 10; // yerel değişken ++counter; }

Kandırmaca Soru

Eğer küresel ve yerel değişkenlerin aynı ismi varsa, fonksiyon içinde hangisi kullanılır ve neden?

Cevap: Yerel olanı kullanılır, çünkü yerel değişken, kendi kapsamı içinde küresel ismi "gölgelemiştir" (shadowing). Küresel değişken, yerel değişkenin tanımlandığı blok dışında erişilebilir durumdadır.

Örnek:

int value = 5; void foo() { int value = 10; printf("%d", value); // 10 yazdırır, 5 değil }

Konuyla ilgili bilgi eksikliğinden kaynaklanan gerçek hata örnekleri


Hikaye

Bir projede küresel hata sayacı tanımlanmışken, bir fonksiyonda aynı isimde yerel bir değişken oluşturulmuş. Hatalar artık küresel olarak kaydedilmiyordu, çünkü tüm değişiklikler sadece yerel değişkende gerçekleşiyordu.

Hikaye

Büyük bir kod modülünde yardımcı bir fonksiyon ve değişken için static belirtilmesi unutulmuş, bu da bağlantı (linking) sırasında isim çakışmalarına ve projenin farklı parçalarının derlenmesi sırasında tahmin edilemeyen hatalara yol açtı.

Hikaye

Küresel değişkenlerin çoklu iş parçacıklı kodda uygun senkronizasyon olmadan kullanıldığı durumlarla karşılaşıldı. Belirsiz kapsam ve farklı iş parçacıklarındaki değer değişikliklerine dikkat edilmemesi, veri yarışlarına (data race) neden oldu.