Namespaces
Variants

errno

From cppreference.net
< c ‎ | error
헤더 파일에 정의됨 <errno.h>
#define errno /* implementation-defined */

errno 는 (아래 참고 사항 참조) 스레드-로컬 (C11부터) int 타입의 수정 가능한 lvalue로 확장되는 전처리기 매크로입니다. 여러 표준 라이브러리 함수들은 errno 에 양의 정수 값을 기록하여 오류를 나타냅니다. 일반적으로 errno 의 값은 <errno.h> E 로 시작하고 대문자 또는 숫자가 뒤따르는 매크로 상수로 나열된 오류 코드 중 하나로 설정됩니다.

errno 의 값은 프로그램 시작 시 0 이며, 라이브러리 함수는 오류 발생 여부와 관계없이 errno 에 양의 정수를 기록할 수 있지만, 라이브러리 함수는 절대 0 errno 에 저장하지 않습니다.

라이브러리 함수 perror strerror 는 현재 errno 값에 해당하는 오류 조건에 대한 텍스트 설명을 얻는 데 사용할 수 있습니다.

참고: C11 이전까지 C 표준은 모순된 요구사항을 가지고 있었는데, errno 가 매크로라고 명시하면서 동시에 " errno 가 매크로인지 외부 연결을 가진 식별자인지는 명시되지 않음"이라고 규정했습니다. C11에서는 이를 수정하여 매크로로 정의되도록 요구합니다 (WG14 N1338 도 참조하십시오).

예제

#include <errno.h>
#include <math.h>
#include <stdio.h>
void show_errno(void)
{
    const char *err_info = "unknown error";
    switch (errno)
    {
        case EDOM:
            err_info = "domain error";
            break;
        case EILSEQ:
            err_info = "illegal sequence";
            break;
        case ERANGE:
            err_info = "pole or range error";
            break;
        case 0:
            err_info = "no error";
    }
    fputs(err_info, stdout);
    puts(" occurred");
}
int main(void)
{
    fputs("MATH_ERRNO is ", stdout);
    puts(math_errhandling & MATH_ERRNO ? "set" : "not set");
    errno = 0;
    (void)(1.0 / 0.0);
    show_errno();
    errno = 0;
    (void)acos(+1.1);
    show_errno();
    errno = 0;
    (void)log(0.0);
    show_errno();
    errno = 0;
    (void)sin(0.0);
    show_errno();
}

가능한 출력:

MATH_ERRNO is set
no error occurred
domain error occurred
pole or range error occurred
no error occurred

참고문헌

  • C23 표준 (ISO/IEC 9899:2024):
  • 7.5 Errors <errno.h> (p: TBD)
  • K.3.1.3 Use of errno (p: TBD)
  • K.3.2 Errors <errno.h> (p: TBD)
  • C17 표준 (ISO/IEC 9899:2018):
  • 7.5 Errors <errno.h> (p: TBD)
  • K.3.1.3 Use of errno (p: TBD)
  • K.3.2 Errors <errno.h> (p: TBD)
  • C11 표준 (ISO/IEC 9899:2011):
  • 7.5 Errors <errno.h> (p: 205)
  • K.3.1.3 Use of errno (p: 584)
  • K.3.2 Errors <errno.h> (p: 585)
  • C99 표준 (ISO/IEC 9899:1999):
  • 7.5 Errors <errno.h> (p: 186)
  • C89/C90 표준 (ISO/IEC 9899:1990):
  • 4.1.3 오류 <errno.h>

참고 항목

표준 POSIX 호환 오류 조건을 위한 매크로
(매크로 상수)
현재 오류에 해당하는 문자열을 stderr 에 출력
(함수)
주어진 오류 코드에 대한 텍스트 설명을 반환
(함수)
일반 수학 함수에서 사용하는 오류 처리 메커니즘을 정의
(매크로 상수)