C++ — Änderungen 9468 → 9588

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'' - dabei werden die Funktionsnamen nicht direkt als Symbolnamen genommen, sondern Parameter- und Rückgabetypen und Informationen zum Namespace mit in den Symbolnamen eingebaut - deaktivieren für diese Funktion. Dies geschieht dadurch, dass die betreffende Funktion innerhalb des C++-Sourcecodes ''extern "C"'' deklariert wird, wie in folgendem Beispiel:
+
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 ==