Согласно (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's type has C language linkage
extern "C" FUNC f3;
// the name of function f3 and the function's 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 или C ++?
Как указал @Johannes Schaub, в Стандарте нет реального объяснения того, что это означает, поэтому его можно интерпретировать по-разному в разных компиляторах.
Объясните, пожалуйста, различия в объектном файле:
1289] тип функции с привязкой к языку C и язык C ++.