본문 바로가기

Programming/C & C++

ssize_t, size_t 그리고 pid_t

ssize_t, size_t, pid_t 는 고전적인(primitive) 자료형이라 한다. 일반적으로 헤더에 선언되어 있는데, 사실 C의 typedef 선언을 통해서 정의되어 있다. 즉 새롭게 등장한 것이 아니라, 잘 알고 있는 int, float, long과 같은 기본 자료형을 가지고, 이름만 바꾸어 정의해 놓은 것이다. 이러한 자료형들은 꽤 오래 전부터 존재하고 있엇다. 그렇다면 도대체 왜 이러한 것을 정의해 놓고 사용하는 것일까?? int, short, float 라고 하면 사용하기 편할 텐데...


지금은 int가 32비트라고 한다. 보편적으로 사용되는 운영체제와 컴퓨터가 32비트이기 때문이다. 과거 16비트 시설에는 int가 16비트였고 곧 64비트 시대가 도래 할 것이다. 즉, 시스템에 따라서 자료형의 표현 방식이 틀려지므로 내가 구현한 프로그램을 다른 시스템에서 실행 시키기 위해서는 코드의 수정 자체가 불가피하다.


그러나 4바이트의 자료형이 필요한 곳에, 지금 처럼 헤더파일에 unsigned int를 size_t로 정의해 놓고 쓰게 되면, 나중에 시스템이 변경되어서 unsigned int가 더 이상 4바이트를 나타내지 않게 되었을 때, 4바이트를 나타내는 다른 적절한 자료형을 가지고 헤더파일에 선언되어 있는 size_t를 재정의해 주기만 하면 된다.


즉 소스 코드는 바꾸지 않고 컴파일만 다시 한번 하면 새로운 시스템에서 잘 돌아가게 된다는 것이다.


이것이 int, double, short, float과 같은 특정 자료형에 종속되지 않도록, 새로운 이름의 자료형을 정의해 주는 이유가 된다.


보통은 다음과 같은 형식으로 정의한다.


size_t : unsigned 형태의 변수 선언

ssize_t : signed 형태의 변수 선언

pid_t : Process ID를 표현하기 위해서 사용