85.12 불 자료형

처음 C 언어가 개발될 당시에는 따로 불 자료형이 없었습니다. 그래서 숫자 1을 참, 0을 거짓으로 정하였고 지금까지도 바뀌지 않고 그대로 사용되고 있습니다.

시간이 흘러 C++이 나왔고, C++에서는 bool 자료형과 true, false 값을 지원합니다. 그리고 최근에 나온 언어들도 대부분 전용 불 자료형을 지원하고 있습니다. 하지만 C 언어에서는 불 자료형을 공식적으로 지원하지 않았기 때문에 다음과 같은 방식으로 참, 거짓 값을 사용하고 있습니다.

typedef enum _boolean {
    FALSE,
    TRUE
} boolean;
#define FALSE 0
#define TRUE 1

보통 열거형으로 TRUE, FALSE를 만들거나, #define을 사용하여 1TRUE, 0FALSE로 정의하여 사 용합니다. 또한, C++의 true, false 와 혼동되지 않도록 모두 대문자로 된 TRUE, FALSE를 주로 사용하고 있습니다. 지금도 C 언어 소스에서 많이 볼 수 있는 TRUE, FALSE는 모두 이런 방법으로 정의하여 사용하는 것들입니다.

결국 C 언어에서도 불 자료형의 필요성이 계속 제기되면서 C99 표준부터 stdbool.h 헤더 파일이 추가되었고, 모두 소문자로 된 bool 자료형과 true, false 값을 사용할 수 있게 되었습니다. 다음은 Visual Studio(Visual C++)에 포함된 stdbool.h 헤더 파일의 내용입니다(리눅스와 OS X의 stdbool.h 헤더 파일도 전체적인 내용은 같습니다).

stdbool.h

/* stdbool.h standard header */

#ifndef _STDBOOL
#define _STDBOOL

#define __bool_true_false_are_defined  1

#ifndef __cplusplus

#define bool   _Bool
#define false  0
#define true   1

#endif /* __cplusplus */

#endif /* _STDBOOL */

/*
 * Copyright (c) 1992-2010 by P.J. Plauger.  ALL RIGHTS RESERVED.
 * Consult your license regarding permissions and restrictions.
V5.30:0009 */

즉, C99부터 공식적으로 _Bool이라는 자료형이 추가되었습니다. 여기서 _Bool을 다시 bool로 정의하여 bool 자료형을 사용할 수 있게 되었고, 1true, 0false로 정의하여 불값도 사용할 수 있게 되었습니다.