Entiendo que los compiladores de C ++ no son compatibles entre sí. Sin embargo, no pude encontrar nada sobre este tema para C en particular. Sé que el estándar C deja mucho espacio para que los compiladores implementen lo que quieran: por ejemplo, el tamaño y la alineación de la mayoría de los tipos de datos (¿todos?) Está definido por la implementación, salvo algunas garantías mínimas. Por lo tanto, dos compiladores (o dos versiones del mismo compilador) pueden estar en desacuerdo sobre numerosos detalles.
¿Estoy en lo cierto al pensar que no hay garantía de que dos archivos de objetos compilados con compiladores diferentes realmente se vinculen correctamente? Por ejemplo, el tamaño de los punteros podría ser de 32 bits en un archivo de objeto y de 64 bits en el otro. Pero si es así, ¿por qué las bibliotecas C a veces se distribuyen en forma precompilada? ¿Existe la expectativa de que usaré el mismo compilador que usaron (por ejemplo, gcc), o algún estándar de facto que se use para garantizar la compatibilidad binaria? ¿Y cómo otros lenguajes con una interfaz de idioma extranjero aseguran que las cosas se alineen correctamente cuando se vinculan con archivos de objetos C?