2016-07-13 5 views
3

Für eine Funktion Mangeln sagen:Konventionen für Namen

long myfunction(int,float) 

der Compiler diese Schnittstelle dokumentieren kann, sagen:

[email protected]@YAXH 

Wenn ich richtig verstehe, sind die zusätzlichen Zeichen den ursprünglichen Namen schmücken Encodierungen die Anzahl und Arten der Parameter.

Alles, was der Standard sagt (1.3.17) über Mangeln ist:

Signaturen werden als Grundlage für die Namen verwendet, Mangeln und Verknüpfung.

Do Compiler folgt einer Standard-Konvention für das Codierungsschema oben erwähnt?

Alternativ sind zwei Compiler benötigt, um identische verzierten Namen für die gleiche Funktion zu geben?

+6

Kurz gesagt: Nein, und nein. –

+1

@NickyC Sie schlagen mich mit Ihrer Antwort, weil ich dachte, was 5 weitere Buchstaben zu "Nein und Nein" -Satz hinzufügen;) – Logman

+1

Nein, C++ standardisiert keine ABI. Es ist jedoch etwas, das von einigen bemerkenswerten Personen als lohnend erachtet wurde. – chris

Antwort

5

Do alle Compiler folgen einem einzigen Standardschema?

Nein. Welches beantwortet Ihre zweite Frage auch.

Name Mangling ist eine Funktion eines ABI. Und es gibt Standard-ABIs, für die mehrere Compiler Code generieren. Die Itanium ABI, zum Beispiel has its own name mangling scheme, die mehrere Compiler implementieren.

Der C++ - Standard enthält jedoch keine Anforderungen für Namensmangel. In der Tat, es sagt nicht einmal, dass ein solcher Mangel an Namen erforderlich ist.

+0

Gut zu wissen, was Standard darüber sagt. – sjsam

+0

Es ist erwähnenswert, dass ABI für [\ [Application Binary Interface \]] (https://en.wikipedia.org/wiki/Application_binary_interface) steht. – sjsam

+0

@NickyC: Ja! Das habe ich gemeint;) Siehe die aktualisierte Frage. – sjsam