2

我的问题有点简单;

extern "C"是否可以在 C++ 静态类函数上进行 C 链接( )?- 不使用包装器。

4

3 回答 3

5

不,您只能简单地编写一个包装函数。

class X
{
public:
    static void f();
};

extern "C" void call_X_f()
{
    X::f();
}
于 2013-03-18T13:05:55.920 回答
2

正如我在评论中所说,你不能。但是你可以达到同样的净效果。

这就是我所说的:

class A;
extern "C" void foo(A*);


class A
{
    int i;
    friend void foo(A*);
};

extern "C" void foo (A* a)
{
    a->i = 10;
}

int main()
{
    A a;
    foo(&a);
    return 0;
}

在这里可以在 gcc 4.7.2 上编译

于 2013-03-18T13:07:18.717 回答
1

extern "C"不能应用于静态成员函数。但由于目标是从汇编程序调用函数,只需在汇编程序代码中使用错位名称即可。这里没有什么魔法;你需要的只是名字。

于 2013-03-18T13:32:02.180 回答