BOOL 사용시 주의 사항



 Windows Data 타입은 WinDef.h 에 정의 되어 있다.
물론 MSDN 에서도 찾을 수 있다.
http://msdn.microsoft.com/en-us/library/aa383751.aspx


BOOL 의 정의는 다음과 같다.


즉 int 형 값을 가지게 된다.
따라서 일반적으로 bool 과 같은 목적으로 사용 한다면 문제를 일으킬 가능성이 있다.
bool 의 true = 1, false = 0 이 두가지 값을 명시적으로 정의 하고
BOOL 의 TRUE  = 1, FALSE = 0  이라고 정의 한다.

문제가 없어 보이지만 문제의 소지가 있는 것은 BOOL 형을 리턴값으로 사용하는 API 를 사용할 때 문제이다.

BackupEventLog 함수의 리턴 형은 BOOL 이다.
Return Value 값 설명을 보면 함수가 성공하면 0 이 아닌 값을, 실패 할 경우 0 을 리턴한다고 한다.
따라서 이 함수 동작이 성공 했다 하더라도 그 값을 TRUE(1) 과 비교 한다면 비교가 틀릴 수 있을 가능성이 생긴다.




또 한가지 예 로 GetMessge 함수도 주의해서 사용해야 한다.
원형은 아래와 같다.

BOOL GetMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax);


사용 코드를 아래와 같이 작성 한다면

BOOL bRet;

while( (bRet = GetMessage( &msg, hWnd, 0, 0 )) != 0)

{

    if (bRet == -1)

    {

        // handle the error and possibly exit

    }

    else

    {

        TranslateMessage(&msg);

        DispatchMessage(&msg);

    }

}


GetMessage 는 리턴값이 WM_QUIT 일때는 0, 에러 일때는 -1, 그 외의 값은 성공으로 판단한다.
즉, 성공하였을 때의 값은 항상 TRUE(1) 값은 아니라는 소리이다.



※ 참고
Visual C++ 에서 bool 이 가지는 의미
API의 BOOL 리턴값 비교시 주의 사항
Posted by six605
,