1

ホイ、

C++ で記述されたダイナミック ライブラリ ローダーがありますが、C 互換 API を提供します。

そのローダーは、任意のプログラミング言語で記述されたモジュールをロードできます。それらは名前付きリストに配置され、他のモジュールの関数ポインターを要求できます。現在、C で記述され、C コンパイラでコンパイルされたモジュールは、C++ で記述およびコンパイルされた他のモジュールの関数ポインタを取得します。

だから私の質問:関数ポインタのクロスコンパイラは有効ですか? 昔のようなことを聞​​いたと思います__cdecl。Linux 64ビットを使用しています。

ティア

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 ++内で使用する場合、extern"C"リンケージを使用してC関数を宣言する必要があることです。

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