CodeBlanks Logo Icon CodeBlanks

Symbol resolution

Sembol çözümleme ve bağlama öğrenirsin.

Sembol çözümleme nedir?

Sembol çözümleme (symbol resolution), bağlayıcının tanımlanmamış sembol başvurularını karşılık gelen tanımlarla eşleştirmesidir. Bir fonksiyon çağrısı compute(x), derleyici tarafından "tanımsız sembol" olarak kaydedilir; bağlayıcı compute'un tanımını arar.

Tanımsız semboller, derleyici tarafından nesne dosyasındaki sembol tablosunda "undefined" olarak işaretlenir. Bağlayıcı, tüm nesne dosyalarını ve kütüphaneleri tarar; her tanımsız sembol için bir tanım bulur. Eğer tanım bulunamazsa, undefined reference hatası verilir. Bu, çok dosyalı projelerde fonksiyon ve değişkenlerin birbirini bulmasını sağlayan mekanizmadır.

Bağlayıcı nasıl çözer?

Bağlayıcı, sembol çözümlemeyi iki aşamada yapar. İlk aşamada, tüm nesne dosyalarını tarar ve her dosyanın sunduğu ve istediği sembolleri listeler. İkinci aşamada, her istenen sembol için bir tanım arar.

Eğer bir sembol birden fazla dosyada tanımlıysa, çoklu tanım (multiple definition) hatası verilir. Eğer hiçbir dosyada tanımlı değilse, tanımsız başvuru (undefined reference) hatası verilir. Statik kütüphaneler (.a) yalnızca gereken nesneleri dahil eder; dinamik kütüphaneler (.so) ise çalışma zamanında çözümlenir. Bu süreç, C'nin ayrı derleme modelinin temelidir.

Uygulama İleri bildirim ve tanım

int compute(int x); ileri bildirimini yaz (sembol başvurusu). int main(void) içinde printf("Sonuç: %d\n", compute(21)) çağır. main'den sonra int compute(int x) { return x * 2; } tanımını yaz (sembol tanımı).

Başlangıç kodu

main.c
#include <stdio.h>

// compute fonksiyonunun bildirimini yaz
// main'de çağır ve yazdır
// tanımı aşağıda yap

Örnek çözüm

main.c
#include <stdio.h>

int compute(int x);

int main(void) {
    printf("Sonuç: %d\n", compute(21));
    return 0;
}

int compute(int x) {
    return x * 2;
}

Beklenen çıktı

Sonuç: 42

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bildirim anahtar sözcüğünü tamamla

Soru
____ int compute(int x);
Cevap
extern int compute(int x);

Açıklama: extern, sembolün başka yerde tanımlandığını bildirir.

2 Bir sembol tanımsız kalırsa ne olur?

  • Derleyici uyarı verir
  • Program yine de çalışır
  • Sessizce sıfıra atanır
  • Bağlayıcı hata verir Doğru cevap

Açıklama: Tanımsız sembol, bağlayıcının 'undefined reference' hatası vermesine yol açar.

3 Sembol durumunu eşle

Kavram Anlamı
Tanımlı Sağlanır
Tanımsız İstenir
Çoklu tanım Çift tanım hatası
Bulunamadı Bağlayıcı hatası

Uzman bölümündeki tüm dersler