Bindungsangaben
Der Begriff „Binding“ bezieht sich auf das heißt sie das Protokoll zum Verknüpfen von den Funktionen (oder Prozeduren), die in verschiedenen Sprachen geschrieben sind.Die folgenden Aufrufkonventionen sind betroffen:
Berücksichtigung der Groß-und Kleinschreibung von Namen.
Ergänzung von Namen.In C Präfix der Compiler die Namen mit einem Unterstrich.Dies wird häufig als „Dekoration.“ In C++ ist die Namenszerlegung verwendet, um Typinformationen von der Bindung von phase beizubehalten.(Siehe Ergänzte Namen)
Reihenfolge der Argumente im Stapel erwartet werden.
Aufgaben zum Anpassen des Stapels auf Funktionsrückgabe.Entweder die aufgerufene Funktion oder die aufrufende Funktion verantwortlich ist.
Die ausgeblendeten Argumenten übergeben (ob ausgeblendete Argumente übergeben werden.)
extern string-literal { declaration-list }
extern string-literal declaration
Spezifikation für die Datenbindung zu C-Code, erleichtert. C++ graduell zu portieren, indem sie die Verwendung existierendem Code zulässt.
Microsoft-spezifisch
Die einzigen Bindung, die derzeit von Microsoft C++ unterstützt werden, sind „C“ und „C++“.
BEENDEN Sie Microsoft-Besonderen
Das folgende Beispiel deklariert die Funktionen atoi und atol mit C-Bindung:
extern "C"
{
int atoi( char *string );
long atol( char *string );
}
Aufrufe werden diese Funktionen mit C-Bindung gemacht.Das gleiche Ergebnis könnte mit diesen beiden Deklarationen werden:
extern "C" int atoi( char *string );
extern "C" long atol( char *string );
Microsoft-spezifisch
Alle Microsoft C-Standard includedateien verwenden, um Direktiven für die bedingte Kompilierung C++-Kompilierung zu erkennen.Wenn die Kompilierung in C-Format C++-Compiler erkannt wird, werden die Prototypen in extern "C"-Direktive enthalten:
// Sample.h
#if defined(__cplusplus)
extern "C"
{
#endif
// Function declarations
#if defined(__cplusplus)
}
#endif
Microsoft ENDES bestimmten
Sie müssen keine Funktionen in den includedateien als **extern "C"**zu deklarieren.
Wenn eine Funktion überladen ist, kann nicht mehr als eine der Funktionen des gleichen Namens eines Bindungsspezifizierer wurde.(Weitere Informationen finden Sie unter Funktionsüberladung).
Die folgende Tabelle zeigt, wie verschiedene Binden von spezifikationen arbeiten.
Auswirkungen von Bindungs-Spezifikationen
Spezifikation |
Effect |
---|---|
Auf einem Objekt |
Beeinflusst Bindung nur dieses Objekts |
Auf einer Funktion |
Beeinflusst Bindung dieser Funktion und die Objekte, Funktionen oder aller in der sie deklariert werden |
Auf einer Klasse |
Beeinflusst Bindung Nichtmitglieds aller Funktionen und Objekte, die innerhalb der Klasse deklariert werden |
Wenn eine Funktion mehr als eine Spezifikation für die Datenbindung aufweist, müssen sie Agree. Es ist ein Fehler, um Funktionen und C#, als seien ihre C++-Bindung deklarieren.Darüber hinaus wenn zwei Deklarationen für eine Funktion in einem Programm auftreten:eine mit einer Bindung eines außen — Spezifikation und der Deklaration mit der Spezifikation für die Datenbindung muss erste sein.Alle redundanten Deklarationen von Funktionen, die bereits Spezifikation für die Datenbindung haben, sind die Bindung angegeben, die in der ersten Deklaration angegeben wird.Beispiele:
extern "C" int CFunc1();
...
int CFunc1(); // Redeclaration is benign; C linkage is
// retained.
int CFunc2();
...
extern "C" int CFunc2(); // Error: not the first declaration of
// CFunc2; cannot contain linkage
// specifier.
Funktionen und Objekte explizit deklariert, während static innerhalb des Texts eines zusammengesetzten bindungs spezifizierers () als statische Funktionen oder Objekte behandelt werden. der Bindungsspezifizierer wird ignoriert.Andere Funktionen und Objekte verhalten sich so, als wäre die Verwendung des extern-Schlüsselworts deklariert.(Weitere Informationen finden Sie ausführliche Informationen zum Verwenden von extern, um die Bindung anzugebenextern ) - Schlüsselwort.