質問
どのように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と異なる文字を選んでます。
所属していません StackOverflow