표준 라이브러리 헤더 <errno.h>

표준 라이브러리 헤더 <errno.h>

프로그램이 돌다가 어떤 연산이 실패했을 때, 그 원인을 코드 밖으로 알려줘야 할 때가 있어요. C에서는 전역 오류 번호 변수 errno로 이걸 처리해요. <errno.h>는 오류 처리 라이브러리의 일부로, 이 errno 매크로와 표준 오류 조건들을 나타내는 상수를 정의해 주는 헤더예요.

출처: cppreference

본문

오류 번호(Error numbers)

이름 설명
errno POSIX 호환 스레드 지역(thread-local) 오류 번호 변수로 확장되는 매크로
E2BIG, EACCES, ..., EXDEV 표준 POSIX 호환 오류 조건들을 위한 매크로 상수

errno는 현재 스레드의 지역 변수로 확장되는 매크로예요. 그래서 스레드가 여러 개여도 각자 자기 오류 번호를 따로 유지할 수 있죠.

시그니처(Synopsis)

#define EDOM /* implementation-defined */
#define EILSEQ /* implementation-defined */
#define ERANGE /* implementation-defined */

#define errno /* implementation-defined */

// Only if the implementation defines __STDC_LIB_EXT1__ and additionally the user code
// defines __STDC_WANT_LIB_EXT1__ before any inclusion of <errno.h>:
#ifdef __STDC_WANT_LIB_EXT1__
#define __STDC_LIB_EXT1__ /* implementation-defined */
#define errno_t /* implementation-defined */
#endif

EDOM, EILSEQ, ERANGE는 각각 수학 도메인 오류, 시퀀스 오류, 범위 오류를 나타내는 정수 상수예요. 실제 값은 구현마다 정의되지만, 모두 0이 아닌 상수로 정해져 있어요. 라이브러리 함수는 오류가 생기면 errno를 이 값들 중 하나로 설정하지요. 추가로 경계 검사 인터페이스(__STDC_WANT_LIB_EXT1__)를 쓰는 환경에서는 errno_t 타입도 정의돼요.

더 알아보기

  • 오류 처리 라이브러리: <assert.h>와 함께 런타임 오류를 다루는 도구 모음.
  • 수학 함수들은 errno를 어떻게 설정하는지 <math.h><fenv.h>에서 함께 확인해요.