ฉันเข้าใจว่าคอมไพเลอร์ C ++ ไม่สามารถทำงานร่วมกันได้ อย่างไรก็ตามฉันไม่พบสิ่งใดในหัวข้อนี้สำหรับ C โดยเฉพาะ ฉันรู้ว่ามาตรฐาน C ออกจากห้องมากมายสำหรับคอมไพเลอร์ที่จะใช้สิ่งต่าง ๆ แต่พวกเขาเห็นว่าเหมาะสม: ตัวอย่างเช่นขนาดและการจัดแนวของชนิดข้อมูลส่วนใหญ่ (ทั้งหมด?) คือการบันทึกที่ใช้งาน ดังนั้นคอมไพเลอร์สองตัว (หรือคอมไพเลอร์เดียวกันสองเวอร์ชั่น) อาจไม่เห็นด้วยกับรายละเอียดมากมาย
ฉันถูกต้องโดยคิดว่าไม่มีการรับประกันว่าไฟล์ออบเจ็กต์สองไฟล์ที่คอมไพล์ด้วยคอมไพเลอร์ที่ต่างกันจะเชื่อมโยงอย่างถูกต้องจริงหรือ ตัวอย่างเช่นขนาดของพอยน์เตอร์อาจเป็น 32 บิตในหนึ่งอ็อบเจ็กต์ไฟล์และ 64 บิตในอีกอัน แต่ถ้าเป็นเช่นนั้นเหตุใดบางครั้ง C ไลบรารีจึงกระจายในรูปแบบที่คอมไพล์แล้ว? มีความคาดหวังหรือไม่ว่าฉันจะใช้คอมไพเลอร์แบบเดียวกับที่พวกเขาทำ (เช่น gcc) หรือมาตรฐานตามความเป็นจริงบางอย่างที่ใช้ในการรับรองความเข้ากันได้ของไบนารี และภาษาอื่น ๆ ที่มีส่วนต่อประสานกับภาษาต่างประเทศช่วยให้แน่ใจได้อย่างไรว่าสิ่งต่าง ๆ จะเข้าแถวอย่างถูกต้องเมื่อเชื่อมโยงกับไฟล์วัตถุ C?