C เป็นหนึ่งในภาษาที่เก่าแก่ที่สุดยังอยู่รอบ ๆ ABI มันเป็นเรื่องง่ายและแทบทุกระบบปฏิบัติการยังคงใช้อยู่ในปัจจุบันได้รับการเขียนในนั้น ในขณะที่บางส่วนของระบบปฏิบัติการเหล่านั้นอาจมีการเพิ่มสิ่งต่าง ๆ เช่นใน C # /. NET หรืออะไรก็ตามที่อยู่ด้านบนลงมาด้านล่าง
นั่นหมายความว่าในการที่จะใช้ฟังก์ชั่นที่มีให้โดยระบบปฏิบัติการแทบทุกภาษาโปรแกรมออกมีจำเป็นต้องมีวิธีการติดต่อกับห้องสมุด C อยู่แล้ว Perl, Java, C ++, พวกเขาทั้งหมดโดยกำเนิดให้วิธีการ "พูดคุย C" เพราะพวกเขาจะต้องหากพวกเขาไม่ต้องการที่จะบูรณาการทุกล้อเดียวมี
สิ่งนี้ทำให้ C เป็นภาษาละตินของภาษาโปรแกรม (อินเทอร์เน็ตกี่ปีก่อนที่คำอุปมาจะต้องเป็น "ภาษาอังกฤษของภาษาการเขียนโปรแกรม"?)
เมื่อคุณเขียนไลบรารีของคุณใน C คุณจะได้รับอินเตอร์เฟสที่เข้ากันได้กับ C ฟรี (ชัด) หากคุณกำลังเขียนห้องสมุดของคุณใน C ++ คุณสามารถรับการผูก C ผ่านextern "C"
การประกาศตามที่คุณกล่าวถึง
แต่คุณจะได้รับการผูกเหล่านั้นเพียงสำหรับการทำงานที่สามารถแสดงใน C
ดังนั้นไลบรารี API ของคุณไม่สามารถใช้ ...
- แม่แบบ
- ชั้นเรียน
- ข้อยกเว้น
- ฟังก์ชั่นใด ๆ ที่รับหรือส่งคืนวัตถุ
ตัวอย่างง่ายๆหนึ่งตัวอย่างคุณจะต้องทำให้ฟังก์ชั่นที่ส่งออกของคุณรับและส่งคืนอาร์เรย์ ( []
) แทนstd::vector
(หรือstd::string
สำหรับเรื่องนั้น)
ดังนั้นไม่เพียง แต่คุณจะไม่สามารถมอบสิ่งดีๆที่ C ++ นำเสนอให้กับลูกค้าของห้องสมุดของคุณคุณยังต้องใช้ความพยายามเพิ่มเติมในการ "แปล" ไลบรารี API ของคุณจาก C ++ เป็น "เข้ากันได้กับ C" ( extern "C"
)
นั่นคือเหตุผลที่สามารถทำให้ C เป็นตัวเลือกที่ดีกว่าสำหรับการนำไลบรารี่มาใช้ โดยส่วนตัวแล้วฉันคิดว่าประโยชน์ของ C ++ ยังคงมีมากกว่าความพยายามที่จำเป็นสำหรับextern "C"
API แต่นั่นเป็นเพียงฉัน