| Zeile 164: | Zeile 164: | ||
== sonstige Probleme == | == sonstige Probleme == | ||
| − | === C++ Funktionen aus C/Assembler nutzen === | + | === C++-Funktionen aus C/Assembler nutzen === |
| − | Um C++ Funktionen von Sourcecode, der in C oder Assembler geschrieben ist, aufrufen zu können, muss das ''name mangling'' | + | Um C++-Funktionen von Sourcecode, der in C oder Assembler geschrieben ist, aufrufen zu können, muss das ''name mangling'' – dabei werden die Funktionsnamen nicht direkt als Symbolnamen genommen, sondern Parameter- und Rückgabetypen und Informationen zum Namespace mit in den Symbolnamen eingebaut – für diese Funktionen deaktiviert werden. Dies geschieht dadurch, dass die betreffende Funktion innerhalb des C++-Sourcecodes ''extern "C"'' deklariert wird, wie in folgendem Beispiel: |
<cpp>extern "C" void foobar(int i, char* s);</cpp> | <cpp>extern "C" void foobar(int i, char* s);</cpp> | ||
Anschließend kann die Funktion in C++ ganz normal definiert werden und schließlich aus dem C/Assembler-Sourcecode heraus wie sonst üblich aufgerufen werden. | Anschließend kann die Funktion in C++ ganz normal definiert werden und schließlich aus dem C/Assembler-Sourcecode heraus wie sonst üblich aufgerufen werden. | ||
| Zeile 173: | Zeile 173: | ||
<cpp>extern "C" void foobar(int i, char* s); | <cpp>extern "C" void foobar(int i, char* s); | ||
extern "C" void foobar(int i, double* d);</cpp> | extern "C" void foobar(int i, double* d);</cpp> | ||
| − | Der Linker würde 2 Funktionen mit dem Namen 'foobar' finden und könnte das ganze nicht mehr linken und auch nicht feststellen welche Funktion die Aufrufer jeweils meinen. | + | Der Linker würde 2 Funktionen mit dem Namen 'foobar' finden und könnte das ganze nicht mehr linken und auch nicht feststellen, welche Funktion die Aufrufer jeweils meinen. |
== Siehe auch == | == Siehe auch == | ||