C 및 C++ 표준은 일부 데이터 유형의 정확한 길이를 지정하지 않으며 최소 길이 만 지정합니다.타사 라이브러리의 데이터 유형 길이가 다릅니다.
제 3 자 라이브러리 : someLib.lib
(내 플랫폼 용으로 컴파일 됨) 및 그에 해당하는 someLib.h
이 있습니다. 한 내가 int
의를 사용할 수 있도록, 모든 것이 잘 컴파일해야
int getNumber();
void setNumber(int number);
나는이 라이브러리를 소모하는 프로그램을 컴파일, 컴파일러는 someLib.h
에 정의 된 서명 유형을 확인 :의는 다음과 같은 기능이 포함되어 있다고 가정 해 봅시다 .
하지만 내 컴파일러에서 int
이 길거나 짧으면 컴파일 할 때 사용되는 컴파일은 someLib.lib
일까요? 연결 중에 감지됩니까? 런타임 오류가 발생합니까? 컴파일 방법을 모른 채 someLib.lib
을 안전하게 사용할 수 있습니까?
'int'와 같은 간단한 유형에는 거의 문제가 없습니다. 이런 종류의 문제가 나타나는 곳은 컴파일러의 차이점이나 동일한 컴파일러의 다른 옵션에 따라 다른 패딩이있는 구조입니다. 또는 비트 필드와 같은 구현 정의 세부 사항이있는 기능으로 구현할 수 있습니다. 이것이 라이브러리 내에서 이러한 세부 사항을 포함하는 불투명 한 인터페이스를 갖는 한 가지 이유입니다. –