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
Detaylıca anlattığın için teşekkürler Can Koç abim. Kafamda extern "C" kavramı daha iyi oturdu.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…