프로그래밍/C 언어
bool 타입을 지원하지 않는 컴파일러에서 bool 타입 사용하기
ktd2004
2008. 5. 16. 20:17
이글의 내용은 Effective C++에서 가져왔습니다.(제 기억이 맞다면요 ^^;)
지금 내가 사용하는 컴파일러가 bool 타입을 지원하지 않는다면
다음과 같은 방법으로 bool 타입을 만들어 사용할 수 있습니다.
열거형 타입으로 bool 타입을 만드는 방법
typedef를 사용해서 bool 타입을 만드는 방법
이제 위에서 언급한 두 가지 방법의 장점과 단점을 보도록 하죠.
열거형 타입으로 bool 타입을 만드는 방법의 장점과 단점
C++에서 함수의 매개변수가 bool 인지 int인지에 따라 함수를 오버로딩할 수 있습니다.
하지만 단점은 비교 연산자는 bool 이 아닌 int를 반환한다는 것입니다.
따라서 열거형으로 정의한 bool을 사용해서 작성된 코드(함수를 오버로딩했을 때)가 나중에 제대로된 bool을 지원하는 컴파일러에서 오동작을 일으킬 수 있습니다.
typedef를 사용해서 bool 타입을 만드는 방법의 장점과 단점
전통적인 C와 C++의 의미구조와 호환이 됩니다.
나중에 bool을 실제 지원하는 컴파일러를 사용해도 열거형을 사용할 때와 같은 문제가 없습니다.
단점은 int와 bool에 대해서 함수 오버로딩을 할 수 없다는 것입니다.
둘중에 어떤 방법을 사용할지는 개발자에게 달려있겠죠.. ^^;
지금 내가 사용하는 컴파일러가 bool 타입을 지원하지 않는다면
다음과 같은 방법으로 bool 타입을 만들어 사용할 수 있습니다.
- 열거형 타입으로 bool 타입을 만드는 방법
- typedef를 사용해서 bool 타입을 만드는 방법
열거형 타입으로 bool 타입을 만드는 방법
typedef enum bool { false, true} bool;
bool b;
b = true;
bool b;
b = true;
typedef를 사용해서 bool 타입을 만드는 방법
typedef int bool;
#define true 1
#define false 0
bool b;
b = true;
#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)가 호출됩니다.
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에 대해서 함수 오버로딩을 할 수 없다는 것입니다.
둘중에 어떤 방법을 사용할지는 개발자에게 달려있겠죠.. ^^;