的錯誤不是上線d,但與使用鏈接說明(所述extern "C"
)
根據第7.5.4的:
A linkage-specification shall occur only in namespace scope
這意味着你可以將你的函數移出到C函數中很常見的全局名字空間中:
typedef int (*pfun)(int); // line a
extern "C" void foo(pfun); // line b
extern "C" int g(int); // line c
int main()
{
foo(g); // line d
return 0;
}
或命名的命名空間內:
namespace c_funcs
{
typedef int (*pfun)(int); // line a
extern "C" void foo(pfun); // line b
extern "C" int g(int); // line c
}
int main()
{
c_funcs::foo(c_funcs::g); // line d
return 0;
}
...但不是在功能範圍,喜歡你的代碼做什麼。
聯動規範巢,所以你甚至可以做一些奇怪這樣給foo
和g
「C」 鏈接:
typedef int (*pfun)(int); // line a
extern "C" int main()
{
void foo(pfun); // line b
int g(int); // line c
foo(g); // line d
return 0;
}
'的extern 「C」 INT X(INT)'和'INT X(INT )'不是相同的類型。 (C++ 11,7.5/1) – cHao