Frage
Wie wird ein Name-verstümmelt Symbol von C nennen?
module.name:version
void* function(TypeSig); // Type of the function
Ich würde wollen in der Lage sein codepaths in meiner Sprache die Funktion in C geschrieben verwenden Aufrufkonvention über die gleiche ist. Es ist nur so, dass ich in der Version und der Modulpfad innerhalb der Symbole mangle muß ich exportieren, und ich habe die gleiche Kennung Konvention wie C, daher kann ich nicht nur Strich verwenden.
Lösung
IIUC, Sie definieren Ihre eigene Sprache, und suchen nach einem geeigneten Namen Mangeln Algorithmus.
Sie möchten vielleicht die Intel et.al. verwenden Itanium Name Mangeln Algorithmus , die von g verwendet wird ++ auf allen Plattformen. Für den speziellen Fall, könnten Sie jede Ihrer Namen mangle, als ob die C ++ Deklaration war
namespace module{ namespace name { namespace Vversion /*e.g. V1_0 */ {
void *function(int){}
}}}
was würde mangle als
_ZN6module4name4V1_08functionEi
Wie alle Symbole, die Algorithmus verwenden, können sie nicht miteinander in Konflikt geraten. Sie können auch nicht mit einer Standard-C-Funktion in Konflikt _ZN6module4name4V1_08functionEi
genannt, da alle Namen mit _Z beginnen (oder _UPPERCASE) für die Implementierung reserviert (C). Wenn Sie bequem Kündbarkeit von g ++ mögen, können Sie genau diese Konvention verwenden; Sie sonst einen Brief verschieden von Z wählen.