Capisco che i compilatori C ++ non sono compatibili tra loro. Tuttavia, non sono stato in grado di trovare nulla su questo argomento per C in particolare. So che lo standard C lascia molto spazio ai compilatori per implementare le cose come meglio credono: ad esempio, la dimensione e l'allineamento della maggior parte dei tipi di dati (tutti?) È definito dall'implementazione, salvo alcune minime garanzie. Pertanto, due compilatori (o due versioni dello stesso compilatore) possono non essere d'accordo su numerosi dettagli.
Ho ragione nel ritenere che non ci sia alcuna garanzia che due file oggetto compilati con compilatori diversi si colleghino effettivamente? Ad esempio, la dimensione dei puntatori potrebbe essere 32 bit in un file oggetto e 64 bit nell'altro. Ma se è così, perché le librerie C a volte vengono distribuite in forma precompilata? C'è una previsione che userò lo stesso compilatore che hanno fatto (ad es. Gcc), o qualche standard de facto usato per assicurare la compatibilità binaria? E in che modo altre lingue con un'interfaccia in lingua straniera assicurano che le cose si allineeranno correttamente quando si collegano ai file oggetto C?