산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C 언어 에러 처리 마스터하기: 모범 사례와 기법

C 프로그래밍은 직접적인 에러 처리 지원을 제공하지 않지만, 시스템 프로그래밍 언어로서 반환 값을 통해 하위 수준 접근을 제공합니다. 대부분의 C 또는 Unix 함수 호출은 에러 발생 시 -1 또는 NULL을 반환하고 전역 변수인 에러 코드 errno를 설정합니다. 이 변수는 함수 호출 중 에러가 발생했음을 나타냅니다. 다양한 에러 코드는 <error.h> 헤더 파일에 정의되어 있습니다.

따라서 C 프로그래머는 반환 값을 확인하고 반환 값에 따라 적절한 조치를 취할 수 있습니다. 프로그램을 초기화할 때 errno를 0으로 설정하는 것이 좋은 관행입니다. 값 0은 프로그램에 에러가 없음을 나타냅니다.

errno, perror(), strerror()

C 프로그래밍 언어는 perror()와 strerror() 함수를 제공하여 errno와 관련된 텍스트 메시지를 표시할 수 있습니다.

존재하지 않는 파일을 열려고 시도하여 에러 조건을 시뮬레이션해 보겠습니다. 여기서는 두 함수의 사용법을 모두 보여드리지만, 에러 출력을 위해 하나 이상의 방식을 사용할 수 있습니다. 두 번째 중요한 점은 모든 에러 출력을 위해 stderr 파일 스트림을 사용해야 한다는 것입니다.

#include <stdio.h>
#include <errno.h>
#include <string.h>
extern int errno;
int main() {
    FILE *pf;
    int errnum;
    pf = fopen("unexist.txt", "rb");
    if (pf == NULL) {
        errnum = errno;
        fprintf(stderr, "Value of errno: %d\n", errno);
        perror("Error printed by perror");
        fprintf(stderr, "Error opening file: %s\n", strerror(errnum));
    } else {
        fclose(pf);
    }
    return 0;
}

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 나옵니다.

Value of errno: 2
Error printed by perror: No such file or directory
Error opening file: No such file or directory

0으로 나누기 에러

숫자를 나눌 때 프로그래머가 제수가 0인지 확인하지 않아 런타임 에러가 발생하는 것이 흔한 문제입니다.

아래 코드는 나누기 전에 제수가 0인지 확인하여 이 문제를 해결합니다.

Live Demo
#include <stdio.h>
#include <stdlib.h>
main() {
    int dividend = 20;
    int divisor = 0;
    int quotient;
    if (divisor == 0) {
        fprintf(stderr, "Division by zero! Exiting...\n");
        exit(-1);
    }
    quotient = dividend / divisor;
    fprintf(stderr, "Value of quotient : %d\n", quotient);
    exit(0);
}

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 나옵니다.

Division by zero! Exiting...

프로그램 종료 상태

성공적인 작업 후 프로그램이 종료될 때 EXIT_SUCCESS 값으로 종료하는 것이 일반적인 관행입니다. 여기서 EXIT_SUCCESS는 매크로로 0으로 정의됩니다.

프로그램에 에러 조건이 있어 종료하는 경우에는 EXIT_FAILURE 상태(값 -1)로 종료해야 합니다. 위 프로그램을 다음과 같이 다시 작성해 보겠습니다.

Live Demo
#include <stdio.h>
#include <stdlib.h>
main() {
    int dividend = 20;
    int divisor = 5;
    int quotient;
    if (divisor == 0) {
        fprintf(stderr, "Division by zero! Exiting...\n");
        exit(EXIT_FAILURE);
    }
    quotient = dividend / divisor;
    fprintf(stderr, "Value of quotient : %d\n", quotient);
    exit(EXIT_SUCCESS);
}

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 나옵니다.

Value of quotient : 4

C 언어

  1. C 파일 입출력: fopen, fprintf, fread, fseek 마스터하기
  2. Java 예외 처리 마스터: try-catch-finally, throw, throws 완전 정복
  3. ADC 코드 에러율 마스터하기: 알아야 할 핵심 사항
  4. 동력전달 벨트 보관 및 취급 모범 사례
  5. C# 파일 작업 실전 가이드: File 클래스로 존재 확인, 읽기, 복사, 삭제
  6. C++ 시그널 처리 마스터하기: 안전한 인터럽트 관리와 깔끔한 프로그램 종료
  7. C# 예외 처리 마스터하기: 전략과 모범 사례
  8. 파이썬 예외 처리 마스터하기: 종합 가이드
  9. 자재 취급 안전 마스터: 효율적이고 위험 없는 작업을 위한 모범 사례
  10. 자재 핸들링 이해: 핵심 개념 및 모범 사례