Что означает, что имя или тип имеют определенную языковую связь?

Согласно (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, в Стандарте нет реального объяснения того, что это означает, поэтому его можно интерпретировать по-разному в разных компиляторах.

Объясните, пожалуйста, различия в объектном файле:

  • имя функции с привязкой к языку C и языковой связью C ++.

    1289] тип функции с привязкой к языку C и язык C ++.

40
задан Jonathan Leffler 30 May 2016 в 06:22
поделиться