더북(TheBook)

여기서는 atexit 함수로 exit 핸들러인 sayGoodBye를 등록한다. 프로그램이 정상적으로 종료되면 이 함수가 실행되면서 현재 실행 상태를 출력한다. 이런 식으로 코드를 작성하면 동료 개발자에게 꽤 좋은 인상을 남길 수 있다. 실제로 메모리를 해제하거나 로그 파일에 종료에 대한 타임스탬프를 쓰는 등 정리 작업을 수행하는 코드를 모두 이 함수에 넣으면 좋다. atexit(sayGoodBye)라는 문장에서 호출 구문의 형식을 잘 살펴보면, sayGoodBye 뒤에 ()가 없는 것을 볼 수 있다. sayGoodBye 함수는 여기서 호출되는 것이 아니라 atexit로 이 함수의 레퍼런스만 전달되는 것이다.

아주 드물지만 이렇게 설정된 atexit 핸들러가 실행되지 않도록 해야 할 때가 있다. 이를 위해 또 다른 함수인 quick_exitat_quick_exit로 다른 종료 핸들러를 등록할 수 있다. 이렇게 등록한 핸들러는 기본 핸들러의 실행 시간이 너무 오래 걸릴 때 유용하며 사용할 때 주의를 기울여야 한다.

다음 함수인 _Exit는 좀 더 심각한 상황에서 실행된다. 이 함수는 앞에서 본 두 종류의 애플리케이션 종속적인 핸들러가 실행되지 않도록 하여, 파일 닫기처럼 플랫폼 종속적인 정리 작업만 실행되도록 한다. 이 함수를 사용할 때는 더욱 주의를 기울여야 한다.

마지막 함수인 abort는 앞에서 본 함수보다 심각한 정도가 높다. 애플리케이션 핸들러를 호출하지 않을 뿐만 아니라, 시스템의 정리 작업 중 일부도 실행하지 않게 만든다. 이 함수를 사용할 때는 극도로 주의하자.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.