Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menghancurkan Nama Jenis Mangled GCC daripada typeid.name()?

Bagaimanakah Saya Boleh Menghancurkan Nama Jenis Mangled GCC daripada typeid.name()?

Barbara Streisand
Barbara Streisandasal
2024-11-26 06:04:09743semak imbas

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

Demangling Unmalled Type Names dengan typeid.name() dalam GCC

Apabila menggunakan typeid.name() untuk mendapatkan semula nama jenis , penyusun yang berbeza mungkin memberikan hasil yang berbeza-beza. Sebagai contoh, GCC dikenali untuk mengembalikan nama "hancur", manakala Visual C menyampaikan nama yang tidak hancur.

Percanggahan ini berpunca daripada fakta bahawa nilai pulangan typeid.name() adalah ditakrifkan pelaksanaan. Mengikut piawaian C, setiap pelaksanaan mempunyai budi bicara untuk menentukan cara mewakili nama jenis.

Dalam kes GCC, nama yang dikembalikan oleh typeid.name() membawa maklumat tambahan yang dikenali sebagai "nama hancur. " Format ini termasuk hiasan yang berfungsi untuk tujuan pengkompil dalaman. Untuk mendapatkan nama jenis unmalled, anda boleh menggunakan perintah c filt atau fungsi __cxa_demangle.

c filt 4Blah

Output: struct Blah

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

Output: Blah

Dengan menggunakan alatan ini, anda boleh demangle nama jenis yang dihias dan mendapatkan semula representasi yang tidak hancur yang diingini.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghancurkan Nama Jenis Mangled GCC daripada typeid.name()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn