더북(TheBook)

여기서는 puts의 리턴 값이 앞에서 소개한 세 가지 경우 중 오류를 표현하는 특수값인 EOF(end-of-file)인 경우를 표현했다. 이때 발생한 오류의 종류에 따라 stdio.h에서 제공하는 perror 함수를 통해 세부적으로 진단하고, exit로 프로그램을 종료시킨다. 실행에 실패했다고 해서 프로그램을 그냥 덮어 버리면 안 된다. 프로그래밍할 때는 반드시 다음을 명심한다.

TAKEAWAY 8.1 실행에 실패할 가능성은 항상 있다.

TAKEAWAY 8.2 라이브러리 함수의 리턴 값이 오류를 나타내는지 검사한다.

버그는 최대한 개발 초기 단계에 발견해서 수정하는 것이 좋은데, 가장 좋은 방법은 버그가 발생하자마자 프로그램 실행을 멈추도록 구성하는 것이다.

TAKEAWAY 8.3 오류가 발생하면 최대한 빨리 실행을 멈춘다.

C 언어는 errno라는 상태 변수를 제공한다. 이 변수는 라이브러리 함수에서 오류를 추적하는 용도로 흔히 사용한다. perror 함수는 내부적으로 이 상태 변수를 이용하여 진단 정보를 제공한다. 함수가 복구 가능한 형태로 실패하면 오류 상태도 리셋할 수 있어야 한다. 그렇지 않으면 라이브러리 함수나 오류 검사 코드가 꼬일 수 있다.

void puts_safe(char const s[static 1]) {
  static bool failed = false;
  if (!failed && puts(s) == EOF) {
    perror("can't output to terminal:");
    failed = true;
    errno = 0;
  }
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.