TAKEAWAY 6.27 구조체의 레이아웃은 설계 시 주요 결정 사항이다.
몇 년 전에 정해진 설계에 아쉬운 부분이 있을 수 있다. 특히 그 부분을 사용하는 기존 코드를 새로운 상황에 거의 쓸 수 없을 지경에 이를 때 그렇다.
struct는 타입이 서로 다른 오브젝트를 더 큰 오브젝트 하나로 묶는 용도로도 사용한다. 참고로 C 표준은 시간을 나노 초 단위로 다루는 부분을 이렇게 정의했다.
struct timespec { time_t tv_sec; // 총 초 단위 시간 ≥ 0 long tv_nsec; // 나노 초 [0, 999999999] };
▲ 그림 6-13 timespec 구조
여기서 표 5-2에서 본 불투명 타입인 time_t로 초 단위를 표현하고, 나노 초는 long 타입으로 표현했다.4 이렇게 표현하는 이유는 역시 예전 방식을 따르기 때문이다. 요즘에는 다른 타입으로 표현할 수도 있다. struct timespec 타입으로 표현한 두 시각의 차이를 계산하는 함수는 따로 설명하지 않아도 쉽게 구현할 수 있을 것이다.
C 표준인 difftime 함수와 달리 여기서 사용할 함수는 기능이 굉장히 간단하고 플랫폼에 종속적이지 않다. 따라서 이 기능은 누구나 쉽게 구현할 수 있다.Exs 2
Exs 2 두 timespec 값의 차이를 구하는 timespec_diff 함수를 구현해 보자.
4 아쉽게도 여기 나온 time_t의 의미가 표 5-2와 다르다. 특히 tv_sec은 산술식에서 사용될 수도 있다.