JHB의 프로그래밍 삽질기

[MFC] CRect의 IsRectNull()과 IsRectEmpty() 본문

PROGRAMMING/Win/MFC

[MFC] CRect의 IsRectNull()과 IsRectEmpty()

roter 2016.02.16 12:27
CRect의 생성자에 NULL을 넣어서 초기화 해주면 쓰레기 값이 들어간다.

예를 들어

CRect rt(NULL);

하면 rt에는 막 -2349823 이런 쓰레기 값이 들어간다
0으로 초기화 하는게 목적이라면 그냥
CRect rt
까지만 해주는게 제일 좋다.

이 차이가 어디서 발생하냐면

IsRectNull()과 IsRectEmpty() 의 성공 여부 때문이다.

나는 당연히

CRect rt(NULL)
한 다음에 rt.IsRectNull() 하면 TRUE가 리턴될 줄 알았다.
그런데 아니더라.
IsRectNull()은 해당 CRect가 0으로 초기화 돼있는지를 검사하기 때문이다.
하지만 쓰레기 값이 들어있으니 rt(NULL)로 초기화 했다면 IsRectNull()로 FALSE가 나오는 것이다.

안전하게 rt의 값을 확인하고 싶다면 IsRectEmpty()를 쓰는게 좋다.
이는 쓰레기 값이 들어있거나, 0으로 초기화 돼있으면 TRUE를 리턴한다.

결론 :
1. CRect rt(NULL) 하지 말고 걍 CRect rt 까지만.
2. IsRectNull() 말고 IsRectEmpty()로 초기화 상태 검사하는게 안전.
저작자 표시 비영리 변경 금지
신고
Tag
공유하기 링크
0 Comments
댓글쓰기 폼