2011-01-20 7 views

답변

17

bool 형식은 <stdbool.h> 헤더에 정의되어 있으며, 그렇지 않은 경우 _Bool이라는 이름으로 사용할 수 있습니다 (C99 컴파일러를 사용한다고 가정). 당신은 C99이없는 경우, 당신은 항상 이런 식으로 자신의 부울 유형을 발명 할 수

typedef enum {false, true} bool; 
당신은 부울 논리 직접의 int와 1과 0을 사용하지 않도록 정의를 사용할 수
+2

상호 운용성을 위해'#if! defined __cplusplus' ...'#endif'에서 이것을 래핑하는 것이 좋습니다. 덕분에 – Clifford

+0

. 그것은 아주 잘 작동합니다! – olidev

9

int 일반적으로 적어도, C에서 부울로 사용된다 C99 이전. 0은 거짓을 의미하고, 0은 사실을 의미합니다.

+0

실제로 - 'int checkNumber (void) {return 0; }'는 관용적 일 것입니다. – caf

1

. 당신이 C99을 사용하여, 당신은 당신의 자신의 부울 유형을 추가 할 필요가 결정되지 않은 경우 (대부분의 시스템의 경우)에만 1 바이트 대신 4

+1

전처리기에 의존하는 것보다는 열거 형을 사용하는 것이 좋습니다. 더 견고하고 디버깅 (리터럴 상수가 아닌 기호를 얻음)이 더 좋습니다. @ templatetypedef의 대답을 참조하십시오. –

+3

이런 종류의 말도 안되는 소리는 보통'if (var == TRUE)'와 같은 코드로 연결됩니다. 부울 의미론과 함께 C99'_Bool'을 사용하거나'int'를 사용하고 어떤 표현식도 쓰지 않고 간단히'if (var)'와'if (! var)'를 사용하십시오. –

+0

또 다른 문제점은 자연스럽게 사용할 수있는 거의 모든 타사 라이브러리 헤더가 유사하거나 동일한 매크로 식별자 (예 : windows.h 포함)를 정의한다는 것입니다. – Clifford

1

때문에

#define BOOL char 
#define TRUE 1 
#define FALSE 0 

나는 다음 BOOL에 대한 문자를 선택 자신의 이름을 확실히 지어주십시오. 'bool'또는 'BOOL'을 사용하면 타사 라이브러리를 포함 할 때 문제가 발생할 수 있습니다.

#define BOOL int 
#define TRUE 1 
#define FALSE 0 

하지만 #ifndef 이러한 포장 확인하십시오 유일한 예외는의 사실상의 표준을 사용하는 것입니다. 그러나 일부 라이브러리는 'char'을 BOOL로 사용합니다. C++ 백그라운드에서오고 있다면 C++과 상호 운용 할 것인지 생각해보십시오.