C ist eine der ältesten Sprachen, die es noch gibt. Das ABI ist einfach, und praktisch jedes Betriebssystem, das heute noch verwendet wird, wurde darauf geschrieben . Während einige dieser Betriebssysteme Dinge hinzugefügt haben, z. B. in C # /. NET oder was auch immer oben drauf ist, sind sie unten in C. sehr durchdrungen.
Das bedeutet, dass praktisch jede Programmiersprache eine Schnittstelle zu C-Bibliotheken benötigt , um die vom Betriebssystem bereitgestellten Funktionen nutzen zu können . Perl, Java, C ++, sie alle nativ Möglichkeiten bieten , um „C zu sprechen“, weil sie mussten , wenn sie jedes einzelne Rad neu erfinden , gibt es nicht wollte.
Dies macht C zum Latein der Programmiersprachen. (Wie viele Jahre Internet vor dieser Metapher muss "das Englisch der Programmiersprachen" sein?)
Wenn Sie Ihre Bibliothek in C schreiben, erhalten Sie (offensichtlich) kostenlos eine C-kompatible Schnittstelle. Wenn Sie Ihre Bibliothek in C ++ schreiben, können Sie C-Bindungen über die extern "C"
von Ihnen erwähnten Deklarationen abrufen.
Allerdings können Sie diese Bindungen erhalten nur für die Funktionalität , die in C ausgedrückt werden kann .
Ihre Bibliotheks-API kann also nicht ...
- Vorlagen,
- Klassen,
- ausnahmen,
- Alle Funktionen , die Objekte entgegennehmen oder zurückgeben .
Ein einfaches Beispiel: Sie müssten dafür sorgen, dass Ihre exportierten Funktionen anstelle von (oder in diesem Fall) arrays ( ) annehmen und zurückgeben .[]
std::vector
std::string
Damit können Sie nicht nur den Kunden Ihrer Bibliothek nicht die Vorteile von C ++ bieten, sondern müssen auch zusätzliche Anstrengungen unternehmen, um Ihre Bibliotheks-API von C ++ in "C-kompatibel" ( extern "C"
) zu "übersetzen" .
Aus diesem Grund könnte darauf hingewiesen werden, dass C die bessere Wahl für die Implementierung einer Bibliothek ist. Ich persönlich denke, die Vorteile von C ++ überwiegen immer noch den für eine extern "C"
API erforderlichen Aufwand , aber das bin nur ich.