Udostępnij za pośrednictwem


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.)

Zobacz też

Informacje

Użycie extern, aby określić powiązanie