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 に答える