C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 강좌/문서
C++Builder Programming Tutorial&Docments
[93] bool 형의 true false.
김태선 [jsdkts] 29035 읽음    2005-12-21 13:18
C에서는 BOOL 형으로 참 거짓을 판단했었습니다.
사실 정확하게 이야기 하자면 boolean 참 거짓 판별형이 없고
0은 거짓으로 not 0 는 참으로 인식 했습니다.

하지만 여전히 C++에서도 참의 진정한 의미는 not 0 입니다.
0만 아니면 무조건 참이라는 뜻이죠.
그래서
if (PointerA)  // 이는 PointA 클래스포인트가 값을 가지고 있으면.. 즉 객체가 할당되어 있으면이라는 뜻이죠.
  PointerA->DrawText("안녕하삼... ㅡ,.ㅡ;");
같은 식이 가능하죠.

C++에서는 참 거짓의 뜻을 보다 명확하게 하기 위해 파스칼에서 많이 쓰이던
Boolean 형을 도입했습니다.

C++에서는 참 거짓의 판별은 bool 형을 쓰는게 옳고
bool을 써야 혹시 모를 에러의 가능성을 없앨 수 있습니다.
가령 MFC 나 API를 쓸때 자주 나오는 BOOL 형은
enum { FALSE, TRUE }; 로
TRUE == 1 이기 때문에 원래의 참의 의미인 0 가 아닌 값과는 차이가 있습니다.
BOOL 이 int 형이기 때문에 1 이외의 값을 얼마든지 가질 수 있기 때문입니다.
typedef int  BOOL;

그래서 자칫 다음과 같은 코드는 찾기 힘든 버그를 만들 소지를 안게 됩니다.
BOOL condition;
;
if (condition == TRUE)
;
BOOL은 정수형이기 때문에 condition이 자칫 1외에 다른 정수 값을 가질수도 있으며
이 경우도 논리적으로 true 이나 위의 if (condition == TRUE) 비교문에는 거짓으로 판단되는
일이 생기기 때문입니다.

그러나  C++에서 도입된 bool 형은 그럴 위험에서 완전히 벗어나 있습니다.
bool 형은 오직 0과 1만 담을 수 있는 1bit 형 이기 때문입니다.
1bit 형이지만 실제로는 1byte의 공간을 차지하게 됩니다.

bool 형은
bool condition;
;
if (condition == true)
;
아무런 문제가 없습니다.

bool 형은 사실 0과 1이라는 숫자이기도 하기 때문에
정수로의 암묵적인 형 변환이 일어납니다.
int  no = true;
일때 no 는 1을 가지게 됩니다.
원칙적으로 C++에서는 이경우 static casting 을 해야 합니다.
no = static_cast<int>(true);
이러한 너무 뻔한 것은 굳이 타이핑 노고를 할 필요가 없어 보입니다.

이러한 사실에 기초해서 bool을 정수형과 혼합해서 쓸 때 보다 간편한 코드를 구사할 수 있으며
이는 C++에서는 전적으로 안전합니다.
하지만, 코드의 가독성을 생각한다면 크게 바람직한 것은 아닙니다.

bool  bA;
;
int  no;
;
no +=  bA ;
;

어떻게 쓸지는 플머의 몫입니다.

그럼..
신성기 [barmi]   2005-12-27 11:02 X
TurboC시절에도 true의 대표값은 1 입니다. -1이 아닙니다.
그 때문에 다음의 코드가 가능했었습니다.
(int_a == int_b) * 5
// 이 값은 int_a와 int_b가 같을 경우에 5를 가집니다.
김태선 [jsdkts]   2005-12-28 14:34 X
아.. 확인해보니 그렇군요.
제가 기억을 잘못했군요.
고맙습니다. ^^


+ -

관련 글 리스트
93 bool 형의 true false. 김태선 29035 2005/12/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.