가 아니, C 표준은 정수형의 최소 크기를 지정하지만 최대 크기에 대한 보장을하지 않습니다.
해당 크기의 유형을 사용할 수있는 경우 구현시 intN_t
유형을 제공해야합니다. 나는 당신이 크로스 플랫폼 태그를 가지고 있기 때문에 언급한다. 정확한 비트 너비의 타입을 가지지 않는 구현체는 그 타입을 제공 할 필요가 없다.
특정 비트 크기에 사용할 올바른 유형을 일반적으로 선택할 수 있습니다 (예 : cc -D_INT16_IS_INT
및 #ifdef
으로 설정). CHAR_BIT
및 sizeof()
을 사용하여 C 코드로 지원하려는 각 플랫폼에 필요한 정의를 만들 수 있습니다.
c1x 드래프트 (n1362)의 관련 부분은 :
7.18.1.1 정확한 폭 정수형
typedef입니다 이름 intN_t
은 부호있는 정수 타입을 나타낸다 폭 N
, 패딩 비트 없음, 2의 보수 표현. 따라서 int8_t
은 너비가 정확히 8 비트 인 부호있는 정수 유형을 나타냅니다.
typedef 이름 uintN_t
은 너비가 N
인 부호없는 정수 유형을 지정합니다. 따라서 uint24_t
은 너비가 정확히 24 비트 인 부호없는 정수 유형을 나타냅니다.
이러한 유형은 선택 사항입니다. 그러나 구현시 8, 16, 32 또는 64 비트의 너비를 갖는 정수 유형과 2의 보수 표현을 갖는 (부호가있는 유형의 경우) 패딩 비트를 제공하는 경우 해당 유형 정의 된 이름을 정의해야합니다.유형의 선택에 대해서는
, 이런 일이 충분해야합니다
#ifdef INT32_IS_SHORT
typedef short INT32
#endif
#ifdef INT32_IS_INT
typedef int INT32
#endif
#ifdef INT32_IS_LONG
typedef long INT32
#endif
질문이 http://stackoverflow.com/questions/126279/c99-stdint-h-header-and-ms-visual-studio –
@zilgo와 매우 비슷합니다. 답변은 비슷할 수 있습니다. 질문은 그렇지 않다. 126279 년, OP는 이미 stdint.h를 알고 있습니다. NawaMan (분명히)은 질문 할 때 아니었다. –
마지막 가정은 잘못되었습니다. int 크기의 차이가 다른 아키텍처의 컴파일을 반드시 차단하는 것은 아니지만 'i == i & 0xFFFFFFFF'와 같은 잠정적 가정이 될 수 있습니다. 좋은 프로그래머는 2^16의 법칙을 원할 때'& 0xFFFF'를 쓰고'unsigned short'가 정확히 16 비트인지는 신경 쓰지 않습니다. – MSalters