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