2012-04-15 4 views
4

32 비트 단위로 파일에 데이터를 저장하는 프로그램을 작성하고 있습니다 (한 번에 4 바이트 씩). 필자는 64 비트 Windows 시스템에서 코드를 작성했지만 사용 된 컴파일러는 32 비트 (mingw32)입니다. 현재 시스템에서 long int의 크기는 32 비트 (4 바이트)와 동일합니다. 현재 코드를 변경하지 않고 g ++로 다시 컴파일하여 다른 시스템에 코드를 이식하고 있습니다. 그러나 int 또는 long의 크기는 시스템에 따라 다르다는 것을 알게되었습니다. 그것은 헤더 파일에서 매크로를 사용하는 것과 같은 어떤 식 으로든 정수의 크기를 결정하여 int 또는 long을 코드의 데이터 유형으로 사용해야하는지 결정할 수 있습니까? 4 가지 다른 유형의 시스템에서 코드를 다시 컴파일해야합니다. 코드를 수정하여 각 시스템마다 4 개의 복사본을 만들면 정말 골칫거리입니다.시스템을 기반으로 정수 유형을 동적으로 결정합니다 (C++)

답변

10

int32_t과 같은 표준 유형을 사용하고 싶습니다. 이 유형은 항상 32 비트입니다. 필자는 현재이 유형을 휴대용 데이터베이스 (berkeley db)에서 시스템 간 호환성을 위해 사용합니다.

here 모두를 참조하십시오.

이러한 정의를 얻으려면 stdint.h를 포함 시키십시오.

+0

고마워요에 정의되어 있습니다. 나는 이것이 내가보고있는 것이라고 생각한다. :) – user1285419

2

sizeof (int)를 사용하여 정수의 크기를 결정할 수 있습니다. 특정 크기를해야하는 경우

당신이 C99에서 제공하는 표준 솔루션으로 일반적인 문제입니다 stdint.h

3

에서 (또는 int64_t) int32_t 사용해야합니다.

The <stdint.h> header은 특정 크기, 가장 빠른 크기 및 최소 크기의 정수를 제공하는 유형 집합을 정의합니다. 문제를 정확히 해결할 때 매우 유용합니다.

mingw32를 사용하는 것이 좋습니다. 불행히도 Microsoft가 마지막으로 stdint.h에 API를 제공하지 않았 음을 확인했기 때문입니다. 누군가가 Windows 용이 필요한 경우, 오픈 소스 버전이, 참조 : http://code.google.com/p/msinttypes/

0

IMO 문제에 대한 최선의 방법은 int, long long, 등, 대신 플랫폼 독립적 형식 별칭을 사용하지 않는 것입니다 : int8_t를 , int16_t, int32_t, int64_t

는 그들은 <stdint.h>

관련 문제