Mengapa Adakah `typeid.name()` Menghasilkan Output Berbeza dalam GCC dan Bagaimana Saya Boleh Menghancurkannya?

Susan Sarandon
Lepaskan: 2024-11-21 07:20:10
asal
308 orang telah melayarinya

Why Does `typeid.name()` Produce Different Output in GCC and How Can I Demangle It?

Typeid.name() Gelagat dalam GCC dan Teknik Demangling

Apabila menggunakan operator typeid, pembangun menghadapi perbezaan dalam output typeid. name() bergantung pada pengkompil yang digunakan. Artikel ini meneroka sebab perkara ini berlaku dalam GCC dan cara menyelesaikan isu untuk mencetak nama jenis yang tidak rosak.

GCC lwn. Visual C : Paparan Nama Jenis

Dalam contoh dengan syarat, GCC (versi 4.4.4) mengembalikan "4Blah" apabila memanggil typeid(Blah).name(), manakala Visual C 2008 memaparkan "struct Blah." Percanggahan ini disebabkan oleh pengembalian nama jenis berhias GCC.

Nama Jenis Berhias GCC

Pelaksanaan pengendali typeid tidak ditakrifkan secara seragam. Dalam kes GCC, ia mengembalikan nama jenis yang dihias, yang termasuk maklumat tambahan seperti saiz dan penjajaran jenis.

Nama Berhias yang Tidak Kusut

Untuk mendapatkan semula yang tidak kusut. taip nama, pengguna mesti menyahkan nama yang dihias. Ini boleh dicapai menggunakan pelbagai alatan:

  • arahan penapisan c: Utiliti baris perintah yang menghilangkan nama yang dihias.
  • fungsi__cxa_demangle() : Fungsi C yang melakukan demangling.

Memohon Demangling

Dalam GCC, arahan berikut boleh dilaksanakan untuk demangle nama yang dihias "4Blah" :

g++ -fno-rtti -no-pie -o main main.cpp
./main | c++filt
Salin selepas log masuk

Arahan ini akan mencetak "struct Blah" sebagai nama jenis demangled. Mengintegrasikan fungsi __cxa_demangle() ke dalam kod anda juga merupakan pilihan untuk menghilangkan nama yang dihias secara pemrograman.

Atas ialah kandungan terperinci Mengapa Adakah `typeid.name()` Menghasilkan Output Berbeza dalam GCC dan Bagaimana Saya Boleh Menghancurkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan