Was macht extern "C" in C++ und wofür wird es benötigt?
Hallo zusammen! Ich schreibe nicht so lange in C++ und beim Arbeiten mit C-Bibliotheken (z.B. einer alten Grafikbibliothek) stoße ich ständig auf die Konstruktion `extern "C"`. Ich sehe sie in Header-Dateien, verstehe aber nicht ganz, was sie tut.
Zum Beispiel habe ich diesen Code:
```cpp
// mylib.h
#ifdef __cplusplus
extern "C" {
#endif
void my_c_function(int x);
#ifdef __cplusplus
}
#endif
```
Oder wenn ich selbst eine C-Header-Datei einbinde:
```cpp
// main.cpp
extern "C" {
#include "clibrary.h"
}
```
Ich habe gelesen, dass das mit "name mangling" (Benennung von Funktionen in der Binärdatei) zusammenhängt, aber ich verstehe nicht genau, wie das funktioniert. Warum findet mein Programm ohne `extern "C"` die Funktion aus der C-Bibliothek nicht und gibt einen Linker-Fehler wie "undefined reference"? Ich habe sie doch deklariert!
Erklärt mir bitte als Anfänger: Was genau macht diese Konstruktion, in welchen Fällen ist sie notwendig und wie beeinflusst sie den Kompilierungs- und Build-Prozess?