Tôi hiểu rằng trình biên dịch C ++ không tương thích với nhau. Tuy nhiên, tôi không thể tìm thấy bất cứ điều gì về chủ đề này cho C nói riêng. Tôi biết rằng tiêu chuẩn C còn rất nhiều chỗ cho trình biên dịch triển khai mọi thứ theo cách chúng thấy phù hợp: ví dụ: kích thước và sự liên kết của hầu hết các loại dữ liệu (tất cả?) Là tiết kiệm được xác định theo thực thi cho một số đảm bảo tối thiểu. Do đó, hai trình biên dịch (hoặc hai phiên bản của cùng một trình biên dịch) có thể không đồng ý về nhiều chi tiết.
Tôi có đúng không khi nghĩ rằng không có gì đảm bảo rằng hai tệp đối tượng được biên dịch với các trình biên dịch khác nhau sẽ thực sự liên kết đúng không? Ví dụ, kích thước của con trỏ có thể là 32 bit trong một tệp đối tượng và 64 bit trong tệp kia. Nhưng nếu đó là như vậy, tại sao các thư viện C đôi khi được phân phối ở dạng tiền biên dịch? Có một kỳ vọng rằng tôi sẽ sử dụng cùng một trình biên dịch mà họ đã làm (ví dụ gcc), hoặc một số tiêu chuẩn thực tế đang được sử dụng để đảm bảo khả năng tương thích nhị phân? Và làm thế nào để các ngôn ngữ khác có Giao diện Ngoại ngữ đảm bảo mọi thứ sẽ xếp hàng đúng khi liên kết với các tệp đối tượng C?