이 코드를 우선 보면

#include <iostream>

using namespace std;

typedef struct
{
    unsigned int a;
    int b;
    int c;
} TEST, *LPTEST;

int main(void)
{
    LPTEST test_data;       
    LPTEST aaa;
    aaa = (TEST *)malloc(sizeof(TEST));
    aaa->a = 1;
    aaa->b = 2;
    aaa->c = 3;

    DWORD test = (DWORD)aaa;
    test_data = (LPTEST)test;
}

이해하기 쉬운가? 갑자기 포인터에 DWORD로 형 변환시켜서, 저장한 다음에, 그것을 다시 LPTEST 형으로 다시 변환시켜서 ... 쓴다.

애초에 void* 로 넘겨 버려서 사용한다면, 더 가독성이 좋을텐데 말이다.



Don't C++
1. typedef 로 포인터 장난질을 하지 마라, 오히려 손으로 치는것이 가독성이 더 높을 때가 많더라.
2. 포인터를 굳이 DWORD로 변환시킬 일이 없다면, 절대 하지 마라. 변환 시키는 횟수 만큼 가독성이 뿌여질것이다.




posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요

  1. 지나가면서 2009.06.10 21:23  Addr  Edit/Del  Reply

    음.. 잘 봤습니다.. 가독성 문제도 있거니와..
    그보다 진짜 실질적으로 문제가 있는데..
    64비트와의 포팅 문제입니다..
    void* 는 64비트 빌드 때리면 8byte로 취급되겠으나.. DWORD는 죽을때까지(?) 4byte일껄요...
    차라리 DWORD_PTR 이면. .32bit/64bit 에 따라 크기가 달라지게 되구요..

    64비트 빌드 때렸다간.. DWORD로 캐스팅되는 순간 상위 4byte는 날아가겠군요..