C链接C ++静态函数

时间:2013-03-18 12:57:23

标签: c++ c extern

我的问题有点简单;

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

3 个答案:

答案 0 :(得分:5)

不,你不能只是简单地写一个包装函数。

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

extern "C" void call_X_f()
{
    X::f();
}

答案 1 :(得分: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 here

上编译正常

答案 2 :(得分:1)

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