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 함수도 주의해서 사용해야 한다.
원형은 아래와 같다.
사용 코드를 아래와 같이 작성 한다면
GetMessage 는 리턴값이 WM_QUIT 일때는 0, 에러 일때는 -1, 그 외의 값은 성공으로 판단한다.
즉, 성공하였을 때의 값은 항상 TRUE(1) 값은 아니라는 소리이다.
※ 참고
Visual C++ 에서 bool 이 가지는 의미
API의 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 리턴값 비교시 주의 사항