http://blog.naver.com/qktxhtkdl/10110879615

 


UINT_PTR (32비트 및 64비트 호환 포인터연산)   

#include "stdafx.h"
#include <Windows.h>
UINT_PTR CalDistance(UINT_PTR a, UINT_PTR b)
{
 return a-b;
}
int _tmain(void)
{
 INT32 val1 = 10;
 INT32 val2 = 20;
 _tprintf(_T("distance : %d \n") , CalDistance((UINT_PTR)&val1, (UINT_PTR)&val2));
 return 0;
}
 


32비트 시스템과 64비트 시스템은 주소값의 범위가 다르기때문에
 
상호 호환이 가능한 코드를 사용하는 것이 좋다.
 
Polymorphic타입의 자료형을 사용해서 매크로정의에 따라 32비트 & 64비트 호환이 되는 코드는 위처럼 UINT_PTR을 사용한다.
 
PTR은 포인터 자체가 아닌, 포인터 연산을 위해 존재한다는 뜻으로 해석하면 된다.

 


 

 

http://vvalkyrie.tistory.com/705

 

INT_PTR 형 분류없음 2007/11/13 11:47
64비트 호환 프로그래밍을 위해 _PTR 접미사 (type for pointer precision의 뜻)가 붙는 형들이 새로 정의되었다는 것을 알았다. 포인터 연산을 위해 포인터 변수를 정수형 변수로 type casting 할 때 발생하는 문제를 해결하기 위해 도입된 듯. 이 중 UINT의 _PTR 형인 UINT_PTR 형은 다음과 같이 정의되어 있다.

[CODE]#if defined(_WIN64)
    typedef unsigned __int64 UINT_PTR;
#else
    typedef unsigned int UINT_PTR;
#endif[/CODE]
원래 이걸 찾게 된 이유는 SOCKET 형의 정체가 UINT_PTR 형이었기 때문이다.

winsock2.h:[CODE]typedef UINT_PTR SOCKET;[/CODE]

반응형

+ Recent posts