문제

모든 플랫폼에서 항상 4 바이트 인 정수 유형을 선언하는 가장 좋은 방법은 무엇입니까? 16 비트가있는 특정 장치 나 이전 기계에 대해 걱정하지 않습니다. int.

도움이 되었습니까?

해결책

#include <stdint.h>

int32_t my_32bit_int;

다른 팁

C는 정확한 크기의 정수 유형으로 크게 관심이없고 C99는 헤더를 소개합니다. stdint.h , 아마도 당신의 최선의 방법 일 것입니다. 그것을 포함 시키면 예를 들어 사용할 수 있습니다 int32_t. 물론 모든 플랫폼이이를 지원하는 것은 아닙니다.

Corey의 대답은 "최고"에 맞습니다. 제 생각에는 간단한 "int"도 실제로 작동합니다 (16 비트 int가있는 시스템을 무시하고 있음). 이 시점에서 많은 코드가 INT에 달려있어 시스템 공급 업체가 변경되지 않을 것입니다.

(64 비트 시스템에서 32 비트가 32 비트 인 이유와 "긴 길"이있는 이유도 참조하십시오.)

그러나 int32_t를 사용하는 이점 중 하나는이 문제를 영속하지 않는다는 것입니다!

Brian Gladman 's 사본을 사냥 할 수 있습니다. brg_types.h 당신이 없다면 stdint.h.

brg_types.h 플랫폼에서 다양한 정수의 크기를 발견하고 8, 16, 32 및 64 비트의 공통 크기에 대한 typedefs를 만듭니다.

포함해야합니다 inttypes.h 대신에 stdint.h 왜냐하면 stdint.h Solaris와 같은 일부 플랫폼에서는 사용할 수 없습니다. inttypes.h 포함됩니다 stdint.h Linux와 같은 시스템에 대해 포함하는 경우 inttypes.h 그러면 코드가 Linux와 Solaris 사이에 더 휴대 할 수 있습니다.

이 링크는 내가 말하는 것을 설명합니다.inttypes에 대한 HP 링크

그리고이 링크에는 사용하고 싶지 않은 이유를 보여주는 테이블이 있습니다. long 또는 int 데이터 유형에 특정 수의 비트가 존재한다는 의도가있는 경우.휴대용 데이터 유형에 대한 IBM 링크

STDINT.H를 귀하의 시스템에 사용할 수 없으면 직접 만드십시오. 나는 항상 서명 된/부호없는 8, 16 및 32 비트 값에 대해 typedef를 가진 "type.h"라는 파일이 있습니다.

또한 대상 플랫폼에 따라 빌드 시스템에 Autotools를 사용할 수 있습니다.

stdint.h/inttypes.h가 존재하는지 확인하고 "config.h"에서 적절한 typedef를 만들지 않으면

stdint.h는 명백한 선택이지만 반드시 사용할 수는 없습니다.

휴대용 라이브러리를 사용하는 경우 이미 휴대용 고정형 정수를 제공 할 수 있습니다. 예를 들어 SDL은 있습니다 Sint32 (S는 "서명"을위한 것임), Glib은 gint32.

C99 이상

사용 <stdint.h>.

구현이 2의 보완 32 비트 정수를 지원하는 경우 정의해야합니다. int32_t.

그렇지 않다면 다음으로 가장 좋은 것은입니다 int_least32_t 이는 표현에 관계없이 최소 32 비트 인 구현에 의해 지원되는 정수 유형입니다 (2의 보완, 보완 등).

도 있습니다 int_fast32_t 이는 최소 32 비트 너비의 정수 유형이며, 해당 크기 요구 사항에 대해 가장 빠른 작업을 허용하기 위해 선택되었습니다.

ansi c

당신이 사용할 수있는 long, 이는 표준에 의해 지정된 최소 범위 요구 사항의 결과로 32 비트 이상이 보장됩니다.

32 비트 번호에 맞게 가장 작은 정수 유형을 사용하려면 정의 된 매크로와 같은 전처리 명령문을 사용할 수 있습니다. <limits.h>:

#define TARGET_MAX 2147483647L

#if   SCHAR_MAX >= TARGET_MAX
  typedef signed char int32;
#elif SHORT_MAX >= TARGET_MAX
  typedef short int32;
#elif INT_MAX   >= TARGET_MAX
  typedef int int32;
#else
  typedef long int32;
#endif

#undef TARGET_MAX
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top