#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"
Комментариев нет:
Отправить комментарий