C++ Dilinde Extern "C" Nedir?

Varyemez

Hectopat
Katılım
3 Şubat 2018
Mesajlar
199
Yer
Türkiye
Daha fazla  
Cinsiyet
Erkek
Meslek
Lise Öğrencisi
Merhaba, kullandığım bazı kütüphanelerin headerlarını incelediğim zaman extern "C" yazan satırlar olduğunu fark ettim, bu extern "C" ne işe yarıyor? Teşekkürler.

C++:
#ifdef __cplusplus
extern "C" {
#endif
/*
Fonksiyon prototipleri
*/
#ifdef __cplusplus
}
#endif
 
Çözüm
Compiler'ın name mangling yapmamasını sağlar. Runtime'daki dll yükleme mantığı çalışabilmesi için işletim sistemleri, fonksiyonlar ve global değişkenlerin isimlerini exe dosya formatının içinde kaydeder . Bu tablolar "symbol table" ve "relocation table" ismindedir. Bunun asıl nedeni, identifier'ların sanal adreslere dönüştürülebilmesini sağlamaktır. Değişken ve fonksiyon isimleri linker tarafından sanal adreslere dönüştürülür bu işleme address relocation denir. Bu iki tablo olmasa olmazıdır işin.
C++ dilindeki fonksiyon aşırı yükleme kavramının makina kodu düzeyinde gerçekleştirilebilmesi için name mangling işlemi ile isimler değiştirilir önüne ve arkasına ek karakterler eklenerek. Çünkü tüm global varlıkların isimleri ve nerelerde relocation yapılması gerektiği exe dosya içinde tutulur. Linker ve Loaderlar object dosyaların sectionlarını birleştirir address relocationlarını yapar ve exe dosyayı yada dll'i üretirler.
Compiler'ın name mangling yapmamasını sağlar. Runtime'daki dll yükleme mantığı çalışabilmesi için işletim sistemleri, fonksiyonlar ve global değişkenlerin isimlerini exe dosya formatının içinde kaydeder . Bu tablolar "symbol table" ve "relocation table" ismindedir. Bunun asıl nedeni, identifier'ların sanal adreslere dönüştürülebilmesini sağlamaktır. Değişken ve fonksiyon isimleri linker tarafından sanal adreslere dönüştürülür bu işleme address relocation denir. Bu iki tablo olmasa olmazıdır işin.
C++ dilindeki fonksiyon aşırı yükleme kavramının makina kodu düzeyinde gerçekleştirilebilmesi için name mangling işlemi ile isimler değiştirilir önüne ve arkasına ek karakterler eklenerek. Çünkü tüm global varlıkların isimleri ve nerelerde relocation yapılması gerektiği exe dosya içinde tutulur. Linker ve Loaderlar object dosyaların sectionlarını birleştirir address relocationlarını yapar ve exe dosyayı yada dll'i üretirler.
 
Son düzenleme:
Çözüm
Uyarı! Bu konu 6 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Geri
Yukarı