Der Mechanismus extern "C" ermöglicht die Interaktion mit C-Code. Dies erlaubt die Verwendung von C-Bibliotheken und erleichtert die Verbindung zwischen C++ und anderen Sprachen.
Hintergrund: Von Anfang an wurde die Programmiersprache C++ auf der Grundlage von C entwickelt, hatte jedoch ihre eigenen Besonderheiten, einschließlich 'Name Mangling', um die Überladung von Funktionen und andere Funktionen zu unterstützen.
Problem: Der Name einer Funktion in C++ wird in ein Symbol mit zusätzlicher Struktur (mangled) kompiliert, während es in C keine solche Transformation gibt. Folglich ist es unmöglich, einfach einen C-Header in einen C++-Compiler einzufügen, ohne zusätzliche Anstrengungen.
Lösung:
Die Einbettung von Funktionen in die Konstruktion extern "C" verhindert das 'Name Mangling' und macht sie für den von einem C-Compiler erstellten Code sichtbar.
Beispielcode:
#ifdef __cplusplus extern "C" { #endif void foo(int); #ifdef __cplusplus } #endif
Wesentliche Merkmale:
Kann man Funktionen mit extern "C" überladen?
Nein, Überladung ist nicht möglich, da der Standard-C-Funktionsname verwendet wird.
Was passiert, wenn man eine Template-Funktion als extern "C" deklariert?
Ein Kompilierungsfehler tritt auf, da Templates eine separate Funktion von C++ sind und nicht in C unterstützt werden.
Kann man extern "C" auf der Ebene einer einzelnen Klasse verwenden?
Nein, nur für Funktionen und Variablen, nicht für Klassen oder Methoden.
Ein C++-Projekt verbindet eine Drittanbieter-C-Bibliothek ohne extern "C", daraufhin verlinkt der Code nicht aufgrund von Namenskonflikten.
Vorteile:
Nachteile:
extern "C" wird in Header-Dateien bei der Integration von Drittanbieter-C-Bibliotheken verwendet.
Vorteile:
Nachteile: