Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C 언어에서 오류 처리하는 방법 총정리

C 언어는 자바나 파이썬과 같은 예외 처리(try-catch) 메커니즘을 기본적으로 지원하지 않습니다. 하지만 errno 변수와 표준 라이브러리 함수들을 활용하면 충분히 체계적인 오류 처리를 구현할 수 있습니다. 이 글에서는 C 언어에서 오류를 감지하고 처리하는 다양한 방법을 살펴보겠습니다.

errno 변수란?

오류 발생 여부는 일반적으로 함수의 반환값으로 확인합니다. 대부분의 시스템 호출 및 라이브러리 함수는 오류가 발생하면 -1 또는 NULL을 반환하고, 전역 변수인 errno에 해당 오류 코드를 설정합니다.

프로그램 내에서 함수가 호출될 때마다 errno 변수가 연동되며, 이 전역 변수를 통해 실행 중에 어떤 종류의 오류가 발생했는지 파악할 수 있습니다.

주요 오류 코드 목록

자주 사용되는 오류 코드와 그 의미는 다음과 같습니다.

번호오류명 및 오류 코드
1I/O 오류
5
2파일이나 디렉터리가 없음
2
3인수 목록이 너무 김
7
4메모리 부족
12
5권한 거부
13

C 언어에서 오류를 처리하는 방법

  • perror() — 발생한 오류를 화면에 출력하는 함수입니다. 현재 errno 값에 대응하는 문자열 설명을 함께 반환합니다.

  • strerror()string.h 헤더 파일에 선언된 함수로, 현재 errno 값에 해당하는 오류 문자열에 대한 포인터를 반환합니다.

  • 종료 상태(Exit status)EXIT_SUCCESSEXIT_FAILURE 두 상수를 exit() 함수와 함께 사용하여, 프로그램이 정상 종료되었는지 오류로 인해 종료되었는지를 호출한 환경에 알릴 수 있습니다.

  • 0으로 나누기(Divide by zero) — C 언어에서 별도의 처리 방법이 없는 오류입니다. 따라서 이 상황 자체를 피해야 하며, 프로그램에서 'if' 조건문으로 나누는 값(divisor)이 0인지 미리 검사하는 것이 좋습니다.

예제 코드

다음은 C 언어에서 오류 처리를 구현한 간단한 예제입니다.

#include <stdio.h>
#include <stdlib.h>

main() {
    int x = 28;
    int y = 8;
    int z;

    if( y == 0) {
        fprintf(stderr, "Division by zero!\n");
        exit(EXIT_FAILURE);
    }
    z = x / y;
    fprintf(stderr, "Value of z : %d\n", z );
    exit(EXIT_SUCCESS);
}

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Value of z : 3

이처럼 C 언어에서는 반환값 검사, errno 확인, perror()/strerror() 활용 등을 조합하여 오류를 효과적으로 관리할 수 있습니다. 특히 나눗셈 연산 전에는 반드시 0으로 나누는 경우를 사전에 점검하는 습관을 들이는 것이 안전한 코드 작성의 기본입니다.