다음을 통해 공유


새 데이터 형식

64비트 Windows에는 고정 정밀도 데이터 형식, 포인터 정밀도 형식 및 특정 포인터 정밀도 형식의 세 가지 데이터 형식이 도입되었습니다. 개발자가 64비트 Windows를 준비할 수 있도록 이러한 형식이 개발 환경에 추가되었습니다. 이러한 형식은 기본 C 언어 정수 및 긴 형식에서 파생됩니다. 따라서 32비트 Windows에서 컴파일 및 테스트하는 코드에서 이러한 데이터 형식을 사용한 다음, 64비트 Windows를 대상으로 할 때 64비트 컴파일러와 다시 컴파일할 수 있습니다.

32비트 Windows만 대상으로 하는 애플리케이션의 경우에도 이러한 새 데이터 형식을 채택하면 코드가 더 강력해집니다. 이러한 데이터 형식을 사용하려면 잠재적으로 안전하지 않은 포인터 사용, 다형성 및 데이터 정의에 대해 코드를 검사해야 합니다. 예를 들어 변수가 ULONG_PTR 형식인 경우 산술 연산 또는 다형성에 대한 포인터를 캐스팅하는 데 사용할 것이 분명합니다. 이전 데이터 형식을 사용하여 이러한 사용량을 직접 나타낼 수 없습니다. 파생 형식 명명 또는 헝가리 표기법을 사용하여 간접적으로 이 작업을 수행할 수 있지만 두 기술 모두 오류가 발생하기 쉽습니다.

이러한 모든 데이터 형식은 BaseTsd.h에서 선언됩니다. 이러한 데이터 형식의 정의를 비롯한 자세한 내용은 Windows 데이터 형식을 참조하세요.

고정 전체 자릿수

고정 정밀도 데이터 형식은 32비트 및 64비트 Windows 모두에서 동일한 길이입니다. 이를 기억하기 위해 전체 자릿수는 데이터 형식의 이름에 속합니다. 다음은 고정 정밀도 데이터 형식입니다.

용어 설명
DWORD32
32비트 부호 없는 정수
DWORD64
64비트 부호 없는 정수
Int32
32비트 부호 있는 정수
Int64
64비트 부호 있는 정수
LONG32
32비트 부호 있는 정수
LONG64
64비트 부호 있는 정수
Uint32
서명되지 않은 INT32
Uint64
서명되지 않은 INT64
ULONG32
서명되지 않은 LONG32
ULONG64
서명되지 않은 LONG64

포인터 정밀도

포인터 전체 자릿수가 변경되면(즉, 32비트 Windows에서 32비트, 64비트 Windows가 있는 64비트) 포인터 정밀도 데이터 형식은 그에 따라 정밀도를 반영합니다. 따라서 포인터 산술 연산을 수행할 때 이러한 형식 중 하나에 포인터를 캐스팅하는 것이 안전합니다. 포인터 전체 자릿수가 64비트이면 형식은 64비트입니다. 개수 형식은 포인터가 참조할 수 있는 최대 크기도 반영합니다. 다음은 포인터 정밀도 및 개수 형식입니다.

용어 설명
DWORD_PTR
포인터 정밀도에 대한 부호 없는 long 형식입니다.
HALF_PTR
포인터의 절반 크기입니다. 포인터와 두 개의 작은 필드가 포함된 구조체 내에서 를 사용합니다.
INT_PTR
포인터 정밀도에 대한 부인 정수 형식입니다.
LONG_PTR
포인터 정밀도에 대해 서명된 긴 형식입니다.
Size_t
포인터가 참조할 수 있는 최대 바이트 수입니다. 포인터의 전체 범위에 걸쳐 있어야 하는 개수에 사용합니다.
SSIZE_T
서명된 SIZE_T.
UHALF_PTR
서명되지 않은 HALF_PTR.
UINT_PTR
서명되지 않은 INT_PTR.
ULONG_PTR
서명되지 않은 LONG_PTR.

특정 Pointer-Precision 형식

다음 새 포인터 형식은 포인터의 크기를 명시적으로 지정합니다. 64비트 코드에서 포인터를 사용할 때 주의: 32비트 형식을 사용하여 포인터를 선언하는 경우 운영 체제는 64비트 포인터를 잘려 포인터를 만듭니다. (모든 포인터는 64비트 Windows에서 64비트입니다.)

용어 설명
POINTER_32
32비트 포인터입니다. 32비트 Windows에서는 네이티브 포인터입니다. 64비트 Windows에서는 잘린 64비트 포인터입니다.
POINTER_64
64비트 포인터입니다. 64비트 Windows에서는 네이티브 포인터입니다. 32비트 Windows에서는 기호 확장 32비트 포인터입니다.
높은 포인터 비트의 상태를 가정하는 것은 안전하지 않습니다.