Согласно (c) ANSI ISO/IEC 14882: 2003, стр. 127:
Спецификация привязки привязки. Когда спецификация привязки привязки, самая внутренняя определяет язык. Спецификация связи не устанавливает область действия. Спецификация привязки должна выполняться только в области пространства имен (3.3). В спецификации привязки указанная языковая связь применяется к типам функций всех деклараторов функций, имен функций и имен переменных, введенных декларациями (объявлениями).
extern "C" void f1(void(*pf)(int));
// the name f1 and its function type have C language
// linkage; pf is a pointer to a C function
extern "C" typedef void FUNC();
FUNC f2;
// the name f2 has C++ language linkage and the
// function type has C language linkage
extern "C" FUNC f3;
// the name of function f3 and the function type
// have C language linkage
void (*pf2)(FUNC*);
// the name of the variable pf2 has C++ linkage and
// the type of pf2 is pointer to C++ function that
// takes one parameter of type pointer to C function
Что все это значит? Например, какая связь имеет функция f2()
, связанная с языком C или С++?
Как отметил @Johannes Schaub, нет реального объяснения того, что это означает в стандарте, поэтому его можно интерпретировать по-разному в разных компиляторах.
Пожалуйста, объясните различия в объектном файле:
- имя функции с привязкой языка C и связью языка С++.
- тип функции с C-языковой связью и связью языка С++.