#cpp #visual_cpp
Знаю, что extern "C" используют для отключения декорирования имён, что часто применяется
для экспортируемых функций.
А что делает extern "C++"?
Заголовочный файл corecrt.h содержит
//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
//
// C++ Secure Overload Generation Macros
//
//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
#ifndef RC_INVOKED
#if defined __cplusplus && _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES
#define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_0(_ReturnType, _FuncName, _DstType,
_Dst) \
extern "C++"
\
{
\
template
\
inline
\
_ReturnType __CRTDECL _FuncName(_DstType (&_Dst)[_Size]) _CRT_SECURE_CPP_NOTHROW \
{
\
return _FuncName(_Dst, _Size);
\
}
\
}
Макрос дальше используется в stdio.h:
__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_0(
char*, gets_s,
char, _Buffer)
для объявления функций с массивом фиксированного размера:
Компилятор Visual Studio 2015.
Ответы
Ответ 1
Для связи с другими языками программирования в C++ введена спецификация, называемая linkage specification. Из стандарта C++ (7.5 Linkage specifications) 1 All function types, function names with external linkage, and variable names with external linkage have a language linkage. [ Note: Some of the properties associated with an entity with language linkage are specific to each implementation and are not described here. For example, a particular language linkage may be associated with a particular form of representing names of objects and functions with external linkage, or with a particular calling convention, etc. —end note ] The default language linkage of all function types, function names, and variable names is C++ language linkage. Two function types with different language linkages are distinct types even if they are otherwise identical. Стандартом поддерживается два литерала, используемых для связи с другими языками. Это extern "C++" и extern "C" Другие литералы в этой спецификации могут поддерживаться самостоятельно реализациями компиляторов. Например, могут в программе на языке C++ использоваться имена (например, функции) из языка программирования Fortran. В этом случае эти имена могут предваряться спецификацией extern "FORTRAN"
Комментариев нет:
Отправить комментарий