extern "C" mekanizması, C dilindeki kodla etkileşim sağlama imkanı verir. Bu, C kütüphanelerinin kullanılmasını kolaylaştırır ve C++ ile diğer diller arasında bağlantıyı basitleştirir.
Konu Hakkında: C++ dili, başından itibaren C temeline dayanmaktayken, fonksiyon aşırı yüklemeyi ve diğer özellikleri desteklemek için 'name mangling' gibi kendi özelliklerini de taşımaktadır.
Sorun: C++'deki bir fonksiyon adı, ek bir yapı (mangled) ile sembole derlenirken, C'de böyle bir dönüşüm yoktur. Sonuç olarak, C kodunun başlık dosyasını C++ derleyicisine basitçe dahil etmek mümkün değildir.
Çözüm:
Fonksiyonların extern "C" yapısı ile sarılması, 'name mangling'i devre dışı bırakır ve bunların C derleyicisi ile derlenmiş kod için görünür olmasını sağlar.
Kod örneği:
#ifdef __cplusplus extern "C" { #endif void foo(int); #ifdef __cplusplus } #endif
Anahtar özellikler:
extern "C" ile fonksiyonlar aşırı yüklenebilir mi?
Hayır, çünkü standart C fonksiyon adı kullanıldığı için aşırı yükleme mümkün değildir.
Bir şablon fonksiyonunu extern "C" olarak ilan ederseniz ne olur?
Derleme hatası, çünkü şablonlar C++'in ayrı bir özelliğidir ve C'de desteklenmez.
extern "C" bir sınıf seviyesinde kullanılabilir mi?
Hayır, sadece fonksiyonlar ve değişkenler için geçerlidir, sınıflar veya yöntemler için değil.
C++ projesi, extern "C" olmadan üçüncü taraf C kütüphanesini ekler, bu yüzden kod sembol adları uyuşmazlığı nedeniyle bağlanmaz.
Artılar:
Eksiler:
Üçüncü taraf C kütüphanelerinin entegrasyonu sırasında başlık dosyalarında extern "C" kullanılır.
Artılar:
Eksiler: