Я розумію, що компілятори C ++ не сумісні між собою. Однак я не зміг знайти нічого з цієї теми для C зокрема. Я знаю, що стандарт C залишає багато місця для компіляторів для реалізації речей, однак вони вважають за потрібне: наприклад, розмір та вирівнювання більшості (усіх?) Типів даних визначається реалізацією, крім деяких мінімальних гарантій. Тому два компілятори (або дві версії одного і того ж компілятора) можуть не погоджуватися у численних деталях.
Чи правильно я вважаю, що немає гарантії того, що два об’єктних файли, зібрані з різними компіляторами, насправді зв’язуються належним чином? Наприклад, розмір покажчиків може бути 32 біта в одному об’єктному файлі та 64 біт в іншому. Але якщо це так, чому іноді бібліотеки С поширюються у попередньо складеній формі? Чи очікується, що я буду використовувати той самий компілятор, який вони робили (наприклад, gcc), або якийсь фактичний стандарт використовувався для забезпечення бінарної сумісності? І як інші мови з інтерфейсом іноземної мови гарантують, що все буде належним чином вирівнюватися під час зв’язку з об’єктними файлами C?