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을 사용하여 1을 TRUE, 0을 FALSE로 정의하여 사 용합니다. 또한, 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 자료형을 사용할 수 있게 되었고, 1을 true, 0을 false로 정의하여 불값도 사용할 수 있게 되었습니다.