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...