Comprendo che i compilatori C ++ non sono compatibili tra loro. Tuttavia, non sono riuscito a trovare nulla su questo argomento per C in particolare. So che lo standard C lascia molto spazio ai compilatori per implementare le cose nel modo che ritengono opportuno: ad esempio, la dimensione e l'allineamento della maggior parte (tutti?) Dei tipi di dati è un salvataggio definito dall'implementazione per alcune garanzie minime. Pertanto, due compilatori (o due versioni dello stesso compilatore) possono non essere d'accordo su numerosi dettagli.
Sono corretto nel pensare che non vi sia alcuna garanzia che due file oggetto compilati con compilatori diversi si colleghino correttamente? Ad esempio, la dimensione dei puntatori potrebbe essere 32 bit in un file oggetto e 64 bit nell'altro. Ma se è così, perché a volte le librerie C sono distribuite in forma precompilata? C'è un'aspettativa che userò lo stesso compilatore hanno fatto (ad esempio gcc), o qualche de facto essendo utilizzata per garantire la compatibilità binaria? E in che modo altre lingue con un'interfaccia in lingua straniera assicurano che le cose si allineino correttamente quando si collegano con i file oggetto C?