คำถามติดแท็ก name-mangling


11
ฉันจะแสดงรายการสัญลักษณ์ในไฟล์. so ได้อย่างไร
ฉันจะแสดงรายการสัญลักษณ์ที่ส่งออกจากไฟล์. so ได้อย่างไร ถ้าเป็นไปได้ฉันก็อยากจะรู้แหล่งที่มาของมัน (เช่นถ้าพวกมันถูกดึงเข้ามาจากห้องสมุดคง) ฉันใช้ gcc 4.0.2 ถ้านั่นสร้างความแตกต่าง
486 c++  c  gcc  symbols  name-mangling 

9
เหตุใดฟังก์ชัน C จึงไม่สามารถเปลี่ยนชื่อได้
ฉันมีการสัมภาษณ์เมื่อเร็ว ๆ นี้และมีคำถามหนึ่งที่ถามคือการใช้extern "C"รหัส C ++ คืออะไร ฉันตอบว่ามันคือการใช้ฟังก์ชั่น C ในรหัส C ++ เนื่องจาก C ไม่ใช้ name-mangling ฉันถูกถามว่าทำไม C ถึงไม่ใช้ชื่อเล่นและพูดตามตรงว่าฉันไม่สามารถตอบได้ ฉันเข้าใจว่าเมื่อคอมไพเลอร์ C ++ รวบรวมฟังก์ชันมันตั้งชื่อพิเศษให้กับฟังก์ชันเป็นหลักเนื่องจากเราสามารถมีฟังก์ชันที่มีชื่อเดียวกันมากเกินไปใน C ++ ซึ่งต้องได้รับการแก้ไขในเวลาคอมไพล์ ใน C ชื่อของฟังก์ชันจะยังคงเหมือนเดิมหรืออาจจะมีเครื่องหมาย _ นำหน้า คำถามของฉันคือ: เกิดอะไรขึ้นกับการอนุญาตให้คอมไพเลอร์ C ++ ทำลายฟังก์ชัน C ด้วย ฉันจะเดาว่ามันไม่สำคัญว่าคอมไพเลอร์จะตั้งชื่ออะไรให้กับพวกเขา เราเรียกฟังก์ชันในลักษณะเดียวกันในภาษา C และ C ++
137 c++  c  name-mangling  extern-c 

11
ทำไมเราต้องใช้ภายนอก“ C” {#include <foo.h>} ใน C ++
ทำไมเราต้องใช้: extern "C" { #include &lt;foo.h&gt; } โดยเฉพาะ: เมื่อใดที่เราควรใช้ เกิดอะไรขึ้นในคอมไพเลอร์ / ลิงเกอร์ระดับที่ต้องการให้เราใช้มัน? วิธีการรวบรวม / เชื่อมโยงนี้จะแก้ปัญหาที่เราต้องใช้มันได้อย่างไร?

13
การยกเลิกการเชื่อมโยงผลลัพธ์ของ std :: type_info :: name
ฉันกำลังทำงานกับรหัสบันทึกบางอย่างที่ควรจะพิมพ์ข้อมูลเกี่ยวกับฟังก์ชันการโทร สิ่งนี้ควรจะค่อนข้างง่าย C ++ มาตรฐานมีtype_infoคลาส ซึ่งมีชื่อของ typeid'd class / function / etc แต่มันแหลกเหลว มันไม่มีประโยชน์มาก คือtypeid(std::vector&lt;int&gt;).name()ผลตอบแทนSt6vectorIiSaIiEE. มีวิธีการผลิตสิ่งที่เป็นประโยชน์จากสิ่งนี้หรือไม่? เช่นเดียวstd::vector&lt;int&gt;กับตัวอย่างข้างต้น หากใช้ได้เฉพาะกับคลาสที่ไม่ใช่เทมเพลตก็ใช้ได้เช่นกัน วิธีแก้ปัญหาควรใช้ได้กับ gcc แต่จะดีกว่าถ้าฉันสามารถพอร์ตได้ สำหรับการบันทึกจึงไม่สำคัญมากจนไม่สามารถปิดได้ แต่ควรมีประโยชน์สำหรับการดีบัก
97 c++  gcc  name-mangling 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.