5.2 기본 타입
C는 다양한 기본 타입(basic type)을 제공하며 이를 토대로 파생 타입(derived type)C을 만들 수 있다. 여기에 대해서는 6장에서 자세히 소개한다.
기본 타입 체계는 다소 복잡하고 관련 문법도 직관적이지 않은 편인데, 특별히 기술적인 이유가 있어서라기보다는 역사적인 이유 때문인 경우가 많다. 먼저 signed int, double과 같이 C 언어의 키워드만을 이용한 1차 규격(first level of specification)이 있다. 1차 규격은 주로 C의 내부 기능에 따라 구성된다. 이러한 1차 규격을 토대로 헤더 파일을 통해 2차 규격(second level of specification)을 제공할 수 있는데, 앞에서 본 예제의 size_t와 bool이 여기에 해당한다. 이러한 2차 규격은 타입 의미론(type semantics)에 따라 구성되며, 해당 타입이 프로그래머에게 제공할 속성들을 지정한다.
먼저 1차 규격부터 살펴보자. 앞에서(TAKEAWAY 5.2) 말했듯이 C에서 값은 기본적으로 모두 숫자다. 그런데 종류가 좀 다른 숫자도 있다. 크게 정수와 부동 소수점 수로 나눌 수 있고, 각각에 대해 두 가지씩 구분할 수 있다. 즉, 정수는 부호 없는 정수(unsigned integer)C와 부호 있는 정수(signed integer)C가 있고, 부동 소수점 수는 실수 부동 소수점 수(real floating-point number)C와 복소수 부동 소수점 수(complex floating-point number)C가 있다. 이 네 가지 타입은 각각 세부 타입으로 나눠지며, 각 타입마다 허용하는 값의 범위(정밀도(precision)C)가 다르다.2 표 5-1은 18가지의 기본 타입을 개략적으로 정리한 것이다.
2 여기서 말하는 정밀도(precision)란 용어는 C 표준에 정의된 문맥에 국한된 의미로 사용한다. 부동 소수점 연산의 정확도(accuracy)와는 다르다.