Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Aufruf von C++-Funktionen in C

&pagelevel(4)&pagelevel

C++-Funktionen können in C nur dann benutzt werden, wenn sie einen Typ haben, der auch in C darstellbar ist.

Je nachdem, ob die C++-Quelle verfügbar ist oder nicht, gibt es verschiedene Lösungen für die Funktionsverknüpfung.

Wenn die C++-Quelle zur Verfügung steht, kann die C++-Funktion dort mit extern "C" deklariert werden. Die Funktion muss dann allerdings in allen C++-Quellen, die diese Funktion aufrufen, mit extern "C" deklariert werden!
In der aufrufenden C-Quelle ist eine „normale“ extern-Deklaration für die C++-Funktion erforderlich.

Wenn die C++-Quelle nicht zur Verfügung steht oder eine allgemeine Neu-Deklaration und Neu-Übersetzung nicht tragbar ist, kann eine zusätzliche Funktionsebene eingeschoben werden. In C++ wird eine sog. „Umhüllungsfunktion“ geschrieben und als extern "C" definiert. Diese Umhüllungsfunktion kann dann in C ohne Einschränkungen aufgerufen werden.

Beispiel

Aufzurufende C++-Funktion:

int hidden(int i)
{
  // ...
}

Umhüllungsfunktion:

extern int hidden(int);
extern "C" int wrapper(int i)
{
  return hidden(i);
}

C-Quelle, die die Umhüllungsfunktion aufruft:

extern int wrapper(int);
int main(void)
{
  printf("%d\n", wrapper(100));
  return 0;
} 

Dieses Verfahren kann auch benutzt werden, wenn eine C++-Funktion einen Parameter enthält, dessen Typ nicht direkt einem C-Datentyp entspricht. Z.B. könnte für eine C++-Funktion mit einem Referenztyp-Parameter eine Umhüllungsfunktion mit einem Parameter vom Typ Zeiger geschrieben werden.