C hala etrafındaki en eski dillerden biri. ABI basittir ve günümüzde kullanımda olan hemen hemen her işletim sistemi içinde yazılmıştır . Bu işletim sistemlerinden bazıları, örneğin C # /. NET’te ya da en üstte ne olursa olsun, bazı şeyler eklemiş olsalar da, aşağıdan C’ye çok dik
Bu , işletim sisteminin sağladığı işlevselliği kullanmak için, hemen hemen her programlama dilinin, C kütüphaneleriyle bir şekilde bir arayüz kurmaya ihtiyacı olduğu anlamına gelir . Perl, Java, C ++, hepsi doğal olarak "C" konuşmanın yollarını sunar, çünkü var olan her tekerleği yeniden icat etmek istemiyorlardı.
Bu, C'yi programlama dillerinin Latince'si yapar. (Bu metafordan önce kaç yıl internet "progamming dillerinin İngilizcesi" olmalı?)
Kütüphanenizi C dilinde yazarken, ücretsiz olarak C uyumlu bir arabirim elde edersiniz. Eğer C ++ kütüphanenizi yazıyorsanız, sen yapabilirsiniz aracılığıyla, C bağlamaları olsun extern "C"
bahsettiğin gibi bildirimleri.
Bununla birlikte , bu bağlantıları yalnızca C ile ifade edilebilen işlevler için elde edebilirsiniz .
Yani kütüphane API'nizden yararlanamıyor ...
- şablonlar,
- sınıflar,
- istisnalar
- herhangi bir nesneyi alan veya getiren fonksiyonlar .
Basit bir örnek olarak, dışa aktarılan işlevlerinizin (veya bu konuda) yerine dizileri ( ) almasını ve döndürmesini sağlamanız gerekir .[]
std::vector
std::string
Bu nedenle, yalnızca C ++ 'nın kütüphanenizin müşterilerine sunacağı iyi şeylerden hiçbirini sağlayamazsınız, aynı zamanda kütüphane API'nizi C ++' dan "C uyumlu" ( ) 'ya çevirmek için ek çaba sarf etmeniz gerekir extern "C"
.
Nokta nedeni budur olabilir C kütüphane uygulanması için daha iyi bir seçim olduğunu yapılabilir. Şahsen, C ++ 'ın faydalarının hala bir extern "C"
API için gereken çabadan daha ağır olduğunu düşünüyorum , ama bu sadece benim.