삶 가운데 남긴 기록 AACII.TISTORY.COM
Polymorphic 자료형 본문
마이크로소프트 윈도우즈 시스템은 16비트(9X) 부터 32비트(XP)를 거쳐 64(vista~)비트 기반으로 설계되어 있습니다.
변수를 저장하는 자료형의 크기가 변하는 관계로 포인터를 다룰때 문제가 생깁니다.
define 매크로를 이용하여 빌드시 실행 환경에 따라 빌드를 비교적 쉽게 바꿀 수 있지만, 소스가 매크로로 가득하게되면 가독성이 매우 떨어지게 됩니다.
이에 대한 대안이 Polymorphic 자료형을 이용하는 것입니다.
아래 예제에 사용된 것 처럼 Unsigned Integer 자료형을 PTR 키워드를 붙이게 되면 실행환경에 따라 그 자료형의 크기가 결정됩니다.
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
//64비트 환경 32비트 환경에 따라서 다르게 선언되는 자료형 UINT_PTR
UINT_PTR CalDistance(UINT a, UINT b)
{
//실행 환경에 관계없이 각 UINT형 변수가 저장된 주소의 거리를 계산
return a-b;
}
int _tmain(void)
{
INT val1 = 10;
INT val2 = 20;
_tprintf(_T("Position %d, %d \n"), (UINT)&val1, (UINT)&val2);
_tprintf(_T("distnace: %d \n"), CalDistance((UINT)&val1, (UINT)&val2));
return 0;
}
728x90
'DEV&OPS > C & C++' 카테고리의 다른 글
kernel object and object handle (0) | 2021.09.10 |
---|---|
windows 시스템 함수 호출 오류시 오류코드 획득 (0) | 2021.09.07 |
MFC String 자료형 (0) | 2021.09.01 |
C++ 문자열 처리(string class) (0) | 2021.09.01 |