Symbol resolution
- C kursu
- Uzman
- Ders 32/47
- 5 dk
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
#include <stdio.h>
// compute fonksiyonunun bildirimini yaz
// main'de çağır ve yazdır
// tanımı aşağıda yapÖrnek çözüm
#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
____ int compute(int x);
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ı |