2008. 5. 16. 20:17

bool 타입을 지원하지 않는 컴파일러에서 bool 타입 사용하기

이글의 내용은 Effective C++에서 가져왔습니다.(제 기억이 맞다면요 ^^;)


지금 내가 사용하는 컴파일러가 bool 타입을 지원하지 않는다면

다음과 같은 방법으로 bool 타입을 만들어 사용할 수 있습니다.

  • 열거형 타입으로 bool 타입을 만드는 방법
  • typedef를 사용해서 bool 타입을 만드는 방법


열거형 타입으로 bool 타입을 만드는 방법
typedef enum bool { false, true} bool;

bool b;
b = true;


typedef를 사용해서 bool 타입을 만드는 방법
typedef int bool;
#define true   1
#define false 0

bool b;
b = true;



이제 위에서 언급한 두 가지 방법의 장점과 단점을 보도록 하죠.

열거형 타입으로 bool 타입을 만드는 방법의 장점과 단점
C++에서 함수의 매개변수가 bool 인지 int인지에 따라 함수를 오버로딩할 수 있습니다.
하지만 단점은 비교 연산자는 bool 이 아닌 int를 반환한다는 것입니다.
따라서 열거형으로 정의한 bool을 사용해서 작성된 코드(함수를 오버로딩했을 때)가 나중에 제대로된 bool을 지원하는 컴파일러에서 오동작을 일으킬 수 있습니다.
int f(bool);
int f(int);

int a = 3;
f(a);         // int f(int)가 호출됩니다.

bool b = true;
f(b);         // int f(bool)이 호출됩니다.

f( 3 < 2);   // int f(bool)이 아닌 int f(int)가 호출됩니다.



typedef를 사용해서 bool 타입을 만드는 방법의 장점과 단점
전통적인 C와 C++의 의미구조와 호환이 됩니다.
나중에 bool을 실제 지원하는 컴파일러를 사용해도 열거형을 사용할 때와 같은 문제가 없습니다.
단점은 int와 bool에 대해서 함수 오버로딩을 할 수 없다는 것입니다.


둘중에 어떤 방법을 사용할지는 개발자에게 달려있겠죠.. ^^;