Avatar ·

Was macht extern "C" in C++ und warum wird es bei der Arbeit mit C-Bibliotheken benötigt?

Hallo! Ich habe angefangen, C++ zu lernen, und bin auf das Konstrukt `extern "C"` gestoßen, das ich oft in Header-Dateien sehe. Zum Beispiel in Bibliotheken wie SDL oder beim Einbinden alter C-Funktionen. Hier ist ein Beispiel, das ich in einem Artikel gefunden habe: ```cpp // my_header.h #ifdef __cplusplus extern "C" { #endif void my_c_function(int x); int another_c_function(const char* str); #ifdef __cplusplus } #endif ``` Ich verstehe, dass es etwas mit dem Linken und den Funktionsnamen zu tun hat, aber ich kann die Details nicht ganz nachvollziehen. Konkret interessiert mich: 1. Warum können ohne `extern "C"` Linker-Fehler auftreten, wenn man C-Funktionen in C++ verwendet? 2. Was ist "name mangling" und wie hängt es mit diesem Problem zusammen? 3. Warum werden die Deklarationen in `#ifdef __cplusplus` eingeschlossen? Wenn ich in C++ schreibe, ist `__cplusplus` doch immer definiert, oder? 4. Kann ich `extern "C"` für meine eigenen C++-Funktionen verwenden, wenn ich möchte, dass sie aus C-Code zugänglich sind? Ich wäre dankbar für eine Erklärung mit einfachen Beispielen. Habe versucht, es zu verstehen, aber...