표준 라이브러리 헤더 <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>에서 함께 확인해요.