8.1 C 라이브러리의 기본 속성과 제공 함수
라이브러리 함수의 용도는 대략 두 가지로 볼 수 있다.
• 플랫폼 추상 계층: 세부 속성과 플랫폼 요구 사항에서 추출한 기능을 함수로 추상화한 것이다. 이렇게 뽑은 함수 중 IO와 같이 플랫폼에 종속적인 형태로 구현할 수밖에 없는 것도 있다. 이 기능은 플랫폼에 대해 잘 알지 못하면 구현할 수 없는 것이다. 가령 puts는 ‘터미널 출력’을 제공한다. 이 기능을 직접 구현할 정도로 플랫폼에 대한 지식을 갖춘 C 프로그래머는 많지 않다. 그래서 누군가 이런 기능을 함수로 만들어서 제공한다는 것만으로도 크게 도움이 된다.
• 기본 도구: C 프로그래밍 과정에서 자주 발생하는 (strtod와 같은) 작업을 구현하는 함수다. 이런 함수는 인터페이스가 고정되어 있어야 하며, 자주 사용하기 때문에 다른 것보다 특히 효율적으로 구현해야 한다. 또한 엄격한 테스트를 거쳐서 버그를 없애야 안심하고 다른 구현 작업에 활용할 수 있다. 실력 있는 C 프로그래머라면 이 기능을 충분히 구현할 수 있을 것이다.Exs 1
printf와 같은 함수는 두 가지 목적을 갖고 있는데, 기본 도구 성격의 서식 지정 기능과 플랫폼 종속적인 출력 기능이다. (14.1절에서 소개할) snprintf 함수의 경우 서식 지정 기능은 printf와 같지만 결과를 스트링에 저장한다는 점이 다르다. 이렇게 저장된 스트링을 puts로 출력하면 printf와 똑같은 효과를 낼 수 있다.
이 장에서는 C 라이브러리의 인터페이스를 선언한 헤더 파일(8.1.1절)과 다양한 타입의 인터페이스(8.1.2절)와 C 라이브러리에 적용되는 다양한 오류 전략을 소개한다(8.1.3절). 그리고 애플리케이션의 안전성을 높이기 위해 옵션으로 제공하는 인터페이스를 소개하고(8.1.4절) 컴파일 시간 동안 플랫폼 종속적인 속성에 대해 어서션을 사용하기 위한 도구도 소개한다(8.1.5절).
Exs 1 십진수 부동 소수점 상수에 대해 strtod 기능을 제공하는 my_strtod라는 함수를 구현해 보자.