Sdílet prostřednictvím


Specifikace propojení

Termín "specifikace propojení" odkazuje na protokol pro propojení funkcí (nebo postupy) v různých jazycích.Jsou ovlivněny následující konvence volání:

  • Rozlišování názvů.

  • Dekorace názvy.V c kompilátor zadání předpony názvu podtržítko.To se často nazývá "dekorace." V jazyce C++ úprava názvu lze zachovat informace o typu prostřednictvím fáze navázání.(Viz zdobená názvy)

  • Pořadí, ve kterém se očekává argumenty v zásobníku.

  • Odpovědnost za přizpůsobení zásobníku na funkce, vrátit.Volaná funkce nebo volání funkce je zodpovědný.

  • Předání skryté argumentů (zda žádné skryté argumenty jsou předány).

extern string-literal { declaration-list }
extern string-literal declaration

Specifikace propojení usnadňuje použití existující kód postupně portování c kódu jazyka C++.

Konkrétní společnosti Microsoft

Specifikace propojení pouze aktuálně podporované společností Microsoft C++ jsou "C" a "C++".

Konec konkrétní společnosti Microsoft

Následující příklad prohlašuje funkce atoi a atol s c navázání:

extern "C"
{
    int  atoi( char *string );
    long atol( char *string );
}

Na tyto funkce volání pomocí c navázání.Stejného výsledku lze dosáhnout těchto dvou prohlášení:

extern "C" int  atoi( char *string );
extern "C" long atol( char *string );

Konkrétní společnosti Microsoft

Standardní Microsoft C direktiv soubory používat podmíněné kompilace zjistit kompilaci jazyka C++.Při zjištění kompilace C++ prototypy jsou uzavřeny v extern "C" směrnice takto:

// Sample.h
#if defined(__cplusplus)
extern "C"
{
#endif

// Function declarations

#if defined(__cplusplus)
}
#endif 

Konec konkrétní společnosti Microsoft

Není nutné deklarovat funkce standardní zahrnout soubory jako extern "C".

Pokud je funkce přetížený, více než jednu z funkcí se stejným názvem mít specifikátor navázání.(Další informace naleznete v tématu Přetížení funkce.)

Následující tabulka ukazuje, jak různé specifikace navázání práce.

Účinky navázání specifikace

Specifikace

Účinek

V objektu

Ovlivňuje navázání pouze tento objekt

Na funkci

Navázání ovlivňuje funkce a všech funkcí nebo objekty deklarované v rámci

Na třídu

Ovlivňuje navázání všech nečlenský funkce a objekty deklarované v rámci třídy

Pokud má funkce více specifikace propojení, musí souhlasit; Jedná se o chybu deklarovat funkce jako navázání c a C++.Navíc pokud dvě prohlášení pro funkci dochází v programu – jeden s specifikace propojení a bez – prohlášení s specifikace propojení musí být první.Jakékoli prohlášení redundantních funkcí, které již specifikace propojení jsou uvedeny navázání a první prohlášení.Příklad:

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.

Funkce a objekty, které explicitně deklarovat jako statické v těle specifikátor složené navázání ({}) jsou považovány za statické funkce nebo objekty. Specifikátor navázání je ignorována.Další funkce a objekty chovat, jako deklarovány pomocí extern klíčové slovo.(Viz použití extern k navázání určit podrobnosti o extern klíčové slovo.)

Viz také

Referenční dokumentace

Použití k určení propojení extern