C ++ 컴파일러는 서로 호환되지 않는다는 것을 알고 있습니다. 그러나 나는 C에 대해이 주제에서 아무것도 찾을 수 없었습니다. C 표준은 컴파일러가 구현할 수있는 충분한 공간을 남겨둔다는 것을 알고 있지만 대부분의 (모든?) 데이터 유형의 크기와 정렬은 최소한의 보장을 위해 구현 정의 저장입니다. 따라서 두 컴파일러 (또는 동일한 컴파일러의 두 버전)는 수많은 세부 사항에 동의하지 않을 수 있습니다.
다른 컴파일러로 컴파일 된 두 개의 객체 파일이 실제로 올바르게 링크된다는 보장이 없다고 생각하는 것이 맞습니까? 예를 들어, 포인터의 크기는 한 객체 파일에서 32 비트이고 다른 객체 파일에서 64 비트 일 수 있습니다. 그러나 그렇다면 왜 C 라이브러리가 때로는 사전 컴파일 된 형태로 배포됩니까? 내가했던 것과 같은 컴파일러 (예 : gcc) 또는 바이너리 호환성을 보장하기 위해 사용되는 사실상의 표준을 사용할 것이라는 기대가 있습니까? 그리고 외국어 인터페이스를 가진 다른 언어는 어떻게 C 객체 파일과 링크 할 때 올바르게 정렬되도록합니까?