โปรแกรม C++ ของฉันจำเป็นต้องใช้ไลบรารี C ภายนอก ดังนั้นฉันจึงใช้
extern "C"
{
#include <library_header.h>
}
ไวยากรณ์สำหรับทุกโมดูลที่ฉันต้องใช้
มันทำงานได้ดีจนถึงตอนนี้ โมดูลใช้ชื่อ นี้ สำหรับตัวแปรบางตัวในไฟล์ส่วนหัวไฟล์ใดไฟล์หนึ่ง ตัวไลบรารี C นั้นสามารถคอมไพล์ได้ดีเพราะจากสิ่งที่ฉันรู้ สิ่งนี้ ไม่เคยเป็นคำหลักใน C
แม้ว่าฉันจะใช้ไวยากรณ์ extern "C" แต่ฉันก็ได้รับข้อผิดพลาดจากโปรแกรม C++ เมื่อฉันรวมไฟล์ส่วนหัวนั้น
หากฉันเปลี่ยนชื่อทุก สิ่งนี้ ในไฟล์ส่วนหัวของไลบรารี C นั้นด้วย _this ทุกอย่างดูเหมือนจะทำงานได้ดี
คำถามคือ:
ไวยากรณ์ extern "C" ไม่ควรเพียงพอสำหรับความเข้ากันได้แบบย้อนหลัง อย่างน้อยก็ในระดับไวยากรณ์สำหรับไฟล์ส่วนหัว นี่เป็นปัญหากับคอมไพเลอร์หรือไม่?
extern "C"
ทำทั้งหมดคือการบอกคอมไพเลอร์ไม่ให้ การรบกวนชื่อ - person Some programmer dude   schedule 03.09.2014extern "C"
บอกว่าจะใช้ชื่อ C mangling ซึ่งโดยทั่วไปหมายถึงการเติมขีดล่าง - person Pete Becker   schedule 03.09.2014extern "C"
ไม่ได้เปลี่ยนภาษาปัจจุบันเป็นภาษา C อย่างน่าอัศจรรย์ สิ่งที่ส่งผลกระทบคือข้อกำหนดการเชื่อมโยงของเอนทิตีภายนอก ไฟล์ส่วนหัวของคุณยังคงคอมไพล์เป็นโค้ด C++ และต้องปฏิบัติตามกฎทั้งหมดของภาษา C++ - person AnT   schedule 03.09.2014