Heim >Backend-Entwicklung >C++ >Wie kann ich die verstümmelten Typnamen von GCC aus typeid.name() entschlüsseln?

Wie kann ich die verstümmelten Typnamen von GCC aus typeid.name() entschlüsseln?

Barbara Streisand
Barbara StreisandOriginal
2024-11-26 06:04:09629Durchsuche

How Can I Demangle GCC's Mangled Type Names from typeid.name()?

Entschlüsseln entwirrter Typnamen mit typeid.name() in GCC

Bei Verwendung von typeid.name() zum Abrufen des Namens eines Typs , können verschiedene Compiler unterschiedliche Ergebnisse liefern. Es ist beispielsweise bekannt, dass GCC einen „entstellten“ Namen zurückgibt, während Visual C einen nicht entstellten Namen liefert.

Diese Diskrepanz ergibt sich aus der Tatsache, dass der Rückgabewert von typeid.name() durch die Implementierung definiert ist. Gemäß dem C-Standard liegt es bei jeder Implementierung im Ermessen, zu bestimmen, wie Typnamen dargestellt werden.

Im Fall von GCC enthält der von typeid.name() zurückgegebene Name zusätzliche Informationen, die als „entstellter Name“ bezeichnet werden. " Dieses Format umfasst Dekorationen, die internen Compilerzwecken dienen. Um den entzerrten Typnamen zu erhalten, können Sie den Befehl c filt oder die Funktion __cxa_demangle verwenden.

c filt 4Blah

Ausgabe: struct Blah

__cxa_demangle("4Blah", nullptr, nullptr, nullptr)

Ausgabe: Blah

Mit diesen Werkzeugen können Sie die dekorierten Typnamen entschlüsseln und die gewünschte entzerrte Darstellung abrufen.

Das obige ist der detaillierte Inhalt vonWie kann ich die verstümmelten Typnamen von GCC aus typeid.name() entschlüsseln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn