Спецификации компоновки
Термин "спецификация компоновки" относится к протоколу, связать функции (или процедуры), написанные на разных языках.Следующие соглашения о вызовах затрагиваются.
Чувствительность к регистру имен.
Оформление имен.В c# имен префиксов компилятора с символа подчеркивания.Это часто называется "украшением". В C++ дополнение имен используется для сохранения сведений о типе через этап компоновки.(См. Внутренние имена)
Порядок аргументов, ожидаемых в стеке.
Обязанностью для обработки стеком при возврате функции.Или вызываемая функция или вызывающая функция отвечают.
Передача скрытых аргументов передаются ли какие-либо аргументы (скрытые).
extern string-literal { declaration-list }
extern string-literal declaration
Спецификация компоновки облегчает постепенно перенос кода c#, C++, разрешить использование существующего кода.
Только для систем Microsoft
Единственные спецификации компоновки в настоящее время поддерживаемых microsoft C++ "C" и "C++".
ЭЛЕМЕНТ, относящийся Майкрософт
В следующем примере объявляется функции atoi и atol с компоновкой c:
extern "C"
{
int atoi( char *string );
long atol( char *string );
}
К этим функциям позвонены с помощью компоновка c.Один и тот же результат может быть достиган с этими объявлениями: 2
extern "C" int atoi( char *string );
extern "C" long atol( char *string );
Только для систем Microsoft
Весь стандарт microsoft c# содержит директивы условной компиляции использования файлов для обнаружения компиляция C++.При компиляции C++ прототипы обнаружена, заключенные в extern "C" директива выглядит следующим образом:
// Sample.h
#if defined(__cplusplus)
extern "C"
{
#endif
// Function declarations
#if defined(__cplusplus)
}
#endif
ЭЛЕМЕНТ, относящийся Майкрософт
Нет необходимости объявлять, что функции в стандарте включают файлы как extern "C".
Если функция перегружена, то не более чем одной из функций того же имени может содержать описатель компоновки.(Дополнительные сведения см. в разделе перегружать функции.)
Следующая таблица показывает, как различные спецификации компоновки.
Влияние спецификации компоновки
Спецификация |
Действие |
---|---|
Для объекта |
Затрагивает только компоновка объекта |
В функции |
Влияет на связь данной функции и всех функций или объекты, объявленные внутри него |
В классе |
Влияет на связь всех функций и объектов nonmember, объявленных внутри класса |
Если функция принимает более одной спецификации компоновки, то они должны требованию. ошибка для объявления функции как имеющий и компоновка c и C++.Более того, если для 2 объявления функции происходят в программе, то - одном с спецификацией компоновки и одним если параметр - объявление со спецификацией компоновки должен быть первым.Предоставляется всем объявлениям функций резервного копирования, которые уже имеют спецификация компоновки переключатель, заданного в первом объявлении.Примеры.
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.
Функции и объекты явным образом, объявленные как Статический в теле описателя компоновки (смеси ) обрабатывать как статические функции или объекты; описатель переключателя пропущен.Другие функции и объекты поведение, если объявлено использование extern ключевое слово.(См. Использование extern, чтобы определить связь дополнительные сведения о extern ключевое слово.)