1

海,

我有一个动态库加载器,它是用 C++ 编写的,但提供了与 C 兼容的 API。

该加载器可以加载以任何编程语言编写的模块。它们排列在一个命名列表中,可以请求其他模块的函数指针。现在,一个用 C 编写并用 C 编译器编译的模块获取任何其他模块的函数指针,这些模块是用 C++ 编写和编译的。

所以我的问题是:函数指针交叉编译器是否有效?我想我听说过__cdecl一次,很久以前。我使用 Linux 64 位。

TIA

4

2 回答 2

1
// my C++ code ...
extern "C" {
  void thisFunctionWillBeCallableFromC();
}

void butThisOneMayNot();

struct S
{
    void thisDefinitelyWontBeCallableFromC(std::map<int, S>);
};

C++ 代码应声明具有extern "C"可从 C 调用的链接的接口。

还是您的意思是由不同编译器生成的 C++ 代码?

于 2012-04-19T12:36:50.877 回答
0

函数指针在 C 和 C++ 之间是兼容的。

唯一的限制是,在 C++ 中使用时,您必须使用外部“C”链接声明 C 函数:

extern "C"
{
     int foo();
}
于 2012-04-19T12:37:50.923 回答