質問

どのようにCから名前マングルシンボルを呼び出すために?

module.name:version

void* function(TypeSig); // Type of the function

私は、呼び出し規約の機能がほぼ同じであるC.で私の言語で書かれたコードパスを使用できるようにしたいと思います。 Cが持っているとして、それゆえ私は、アンダースコアを使用することはできませんそれは私がバージョンと私はエクスポートシンボル内のモジュールパスにマングルしなければならないということだけだ、と私は同じ識別子の規則を持っています。

役に立ちましたか?

解決

IIUC、独自の言語を定義し、適当な名前マングリングアルゴリズムを探しています。

あなたはインテルet.al.を使用する場合があります Itaniumの名前は、すべてのグラムによって使用されるアルゴリズムを、++マングリングプラットフォーム。 C ++宣言はしたかのように、特定のケースでは、あなたの名前のそれぞれをめちゃくちゃかもしれません。

namespace module{ namespace name { namespace Vversion /*e.g. V1_0 */ {
  void *function(int){}
}}}

タグとしてマングルことになります
_ZN6module4name4V1_08functionEi
すべてのシンボルは、そのアルゴリズムを使用すると、

、彼らは互いに競合することはできません。彼らはまた、_Z(又は、_UPPERCASE)で始まるすべての名前は(Cの)実装のために予約されているように、_ZN6module4name4V1_08functionEiと呼ばれる標準C関数と競合することができません。あなたは、G ++から便利な要求可能にしたい場合は、この正確な規則を使用することができます。他にあなたがZと異なる文字を選んでます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top