Specyfikacje powiązania
Termin "Specyfikacja powiązanie" odnosi się do protokołu do łączenia funkcji (lub procedury), zapisane w różnych językach.Dotyczy następujących konwencji wywoływania:
Wielkości liter nazwy.
Dekorowania nazw.C kompilator dodanie prefiksu składającego nazwy, znaku podkreślenia.Jest to często nazywane "dekoracji." W języku C++ przekręcenie nazwy jest używany do zachować informacje o typie poprzez fazę powiązania.(Zobacz zdobione nazwy)
Zamówienie oczekuje argumenty na stosie.
Odpowiedzialność za dostosowanie stosu na funkcji zwrotu.Wywoływana funkcja lub wywoływania funkcji jest odpowiedzialny.
Przekazywanie argumentów ukryte (czy wszelkie ukryte argumenty są przekazywane).
extern string-literal { declaration-list }
extern string-literal declaration
Specyfikacja powiązanie ułatwia stopniowo przenoszenie c kod języka C++, pozwalając na użycie istniejącego kodu.
Programu Microsoft
Specyfikacje tylko powiązania są obecnie obsługiwane przez Microsoft C++ są "C" i "C++".
KONIEC Microsoft szczególne
Poniższy przykład deklaruje funkcje atoi i atol z c powiązania:
extern "C"
{
int atoi( char *string );
long atol( char *string );
}
Wywołania tych funkcji są dokonywane przy użyciu c powiązania.Z tych dwóch deklaracji można osiągnąć ten sam wynik:
extern "C" int atoi( char *string );
extern "C" long atol( char *string );
Programu Microsoft
Wszystkie standardowe C Microsoft obejmują dyrektyw kompilacji warunkowej na wykorzystanie plików do wykrycia kompilacji C++.Po wykryciu kompilacji C++ prototypy są ujęte w extern "C" dyrektywy w następujący sposób:
// Sample.h
#if defined(__cplusplus)
extern "C"
{
#endif
// Function declarations
#if defined(__cplusplus)
}
#endif
KONIEC Microsoft szczególne
Nie trzeba zadeklarować funkcji standardowego Dołącz pliki jako extern "C".
Jeśli funkcja jest przeciążony, nie więcej niż jednej funkcji o tej samej nazwie mają specyfikatora powiązania.(Aby uzyskać więcej informacji, zobacz Przeciążanie funkcji.)
W poniższej tabeli przedstawiono, jak różne specyfikacje powiązanie pracy.
Skutki specyfikacje powiązania
Specyfikacja |
Efekt |
---|---|
Do obiektu |
Powiązanie dotyczy tylko tego obiektu |
W funkcji |
Połączenie wpływa ta funkcja i wszystkie funkcje lub obiekty zadeklarowane w nim |
Na klasy |
Wpływa na powiązanie z wszystkich funkcji prawodawstwa wspólnotowego i zadeklarowane w obrębie klasy obiektów |
Jeśli funkcja ma więcej niż jednego powiązania specyfikacji, musisz wyrazić zgodę; jest błędem deklarowania funkcji jako posiadające powiązania zarówno c i C++.Ponadto wystąpić, jeśli dwie deklaracje dla funkcji w programie — jeden z specyfikacji powiązania i bez — deklaracja ze specyfikacją powiązanie musi być pierwszym.Wszelkich nadmiarowe deklaracji funkcji, które mają już powiązania specyfikacji podane są powiązania, określone w pierwszym zgłoszeniu.Na przykład:
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.
Funkcje i obiekty jawnie deklarowane jako statyczne w ramach organu specyfikatora mieszanek powiązania ({}) są traktowane jako funkcje statycznych lub obiektów; Specyfikator powiązania jest ignorowana.Inne funkcje i obiekty zachowują się tak, jakby zadeklarowane za pomocą extern słowa kluczowego.(Zobacz extern korzystanie, aby określić powiązania szczegółowe informacje na temat extern słowa kluczowego.)