我了解C ++编译器彼此不兼容。但是,我无法在C上找到关于此主题的任何东西。我知道C标准为编译器提供了很多空间,使它们能够执行合适的事情,例如,他们认为合适:例如,大多数(所有?)数据类型的大小和对齐方式是实现定义的,除了一些最小的保证。因此,两个编译器(或同一编译器的两个版本)可能在许多细节上存在分歧。
我是否认为不能保证使用不同编译器编译的两个目标文件实际上可以正确链接是正确的吗?例如,一个目标文件中指针的大小可以是32位,而在另一个目标文件中则可以是64位。但是如果是这样,为什么C库有时会以预编译形式分发?是否期望我将使用与他们相同的编译器(例如gcc),或者使用某些事实上的标准来确保二进制兼容性?带有外语接口的其他语言如何确保在与C对象文件链接时事物能够正确对齐?