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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top