C에서 오류 처리
이 간단한 문서는 C 언어 프로그램에서 오류를 처리하는 데 사용할 수 있는 다양한 방법에 대한 논의에 관한 것입니다.
C에서 오류 처리
오류 처리(또는 예외 처리)가 C에서 직접 지원되지는 않지만 언어에서 오류를 처리하는 방법은 여전히 있습니다. 프로그래머는 함수 반환 값을 테스트하고 처음부터 오류가 발생하지 않도록 해야 합니다.
이러한 반환 값에 대한 빠른 테스트를 빠르게 수행할 수 있습니다. 예를 들어, 많은 C 함수 호출이 오류의 경우 -1
또는 NULL
을 반환하기 때문에 if 문
입니다.
C 언어에서 다양한 유형의 오류를 처리하기 위해 다양한 방법을 사용할 수 있습니다. 그들 중 일부는 이 기사에서 논의됩니다.
- 전역 변수
errno
를 사용합니다. - C 언어에서
perror()
및strerror
() 함수 사용. - 함수의 종료 상태를 사용합니다.
전역 변수 errno
사용
전역 변수 errno
는 라이브러리 파일 errorno.h
에서 정의됩니다. C 프로그래밍 언어에서 errno
라는 변수에는 발생한 오류를 지정하는 데 사용할 수 있는 코드(값)가 자동으로 제공됩니다.
오류 유형은 errno
에 대해 다른 코드(값)로 표시됩니다. 다음은 몇 가지 다른 errno
값과 그에 대한 설명 목록입니다.
에러 코드 | 설명 |
---|---|
1 | 이 작업은 허용되지 않습니다. |
2 | 파일 또는 디렉토리를 찾을 수 없습니다. |
삼 | 기능을 찾을 수 없습니다. |
4 | 모든 시스템 호출이 중단되었습니다. |
5 | 입력 또는 출력 오류. |
6 | 해당 장치를 찾을 수 없습니다. |
7 | 전달된 인수 목록이 지정된 것보다 깁니다. |
8 | 실행 기능 오류. |
9 | 잘못된 파일 번호 오류입니다. |
10 | 칠레 프로세스를 찾을 수 없습니다. |
11 | 다시 시도하십시오. |
12 | 메모리 부족 오류입니다. |
13 | 액세스 권한이 거부되었습니다. |
존재하지 않는 파일을 열려고 시도하는 예제 코드 세그먼트를 고려해 봅시다. 그러면 errno
변수의 값이 표시됩니다.
코드 예:
#include <errno.h>
#include <stdio.h>
int main() {
FILE* file;
// we're trying to open a file that doesn't exist
file = fopen("samepleFile.txt", "r");
printf("The errorno Value is: %d\n ", errno);
return 0;
}
위의 코드 예제에서 우리는 File
에 대한 객체를 생성한 다음 읽기용으로 파일을 열 수 있도록 fopen()
함수를 호출했습니다. 그러나 디렉토리에서 찾을 수 없는 파일 이름을 지정했습니다.
따라서 오류가 발생하고 errno
값이 설정됩니다. 그런 다음 그 값을 인쇄합니다.
출력:
출력에서 반환된 오류 번호는 2
입니다. 위의 표에서 2
는 "해당 파일 또는 디렉터리를 찾을 수 없음"
을 의미하는 것과 일치할 수 있습니다.
perror()
및 strerror()
함수 사용
발생한 오류 유형은 위에서 얻은 errno
값으로 표시됩니다.
오류 설명이 필요한 경우 두 가지 기능을 사용하여 오류 번호와 연결된 텍스트 메시지를 표시할 수 있습니다. 이들은 perror()
및 strerror()
입니다.
-
perror()
함수는 해당errno
에 대해 설정된 실제 메시지 뒤에 오류에 대한 사용자 정의 텍스트 메시지를 표시합니다.통사론:
void perror(const char *str)
str
은 실제 오류 메시지 전에 표시해야 하는 사용자 지정 메시지의 문자열입니다. -
strerror
는 전달된errno
에 대해 설정된 텍스트 메시지를 반환합니다.통사론:
char *strerror(int errnum)
errnum
은 전달된 오류 번호입니다.
존재하지 않는 파일을 여는 이전 예제를 수정하고 perror()
및 strerror()
를 통해 오류 메시지를 표시합니다.
코드 예:
#include <errno.h>
#include <stdio.h>
int main() {
FILE* file;
// we're trying to open a file that doesn't exist
file = fopen("samepleFile.txt", "r");
if (file == NULL) {
printf("Value of error number: %d\n", errno);
perror("Error message by perror");
printf("Error Message from strerror : %s\n", strerror(errno));
`
} else {
fclose(file);
}
return 0;
}
위의 코드 세그먼트에서 errno
값을 인쇄한 다음 perror,
를 사용하여 오류 메시지를 인쇄한 다음 strerror
를 통해 인쇄했습니다.
출력:
EXIT_STATUS
사용
성공 또는 실패 종료를 표시하기 위해 C 표준은 EXIT SUCCESS
및 EXIT FAILURE
라는 두 개의 상수 매크로를 지정하며, 이는 exit()
에 전달될 수 있습니다. 이러한 매크로는 stdlib.h
에 나열된 매크로입니다.
이전 예제를 추가로 수정하고 파일을 찾을 수 없고 사례 파일에서 성공적인 종료가 발견되면 실패 종료 호출을 수행합니다.
코드 예:
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE* file;
// we're trying to open a file that doesn't exist
file = fopen("samepleFile.txt", "r");
if (file == NULL) {
int errorNumber = errno;
printf("Value of error number: %d\n", errno);
perror("Error message by perror");
printf("Error Message from strerror : %s\n", strerror(errno));
exit(EXIT_FAILURE);
} else {
fclose(file);
exit(EXIT_SUCCESS);
}
printf("Program exiting");
return 0;
}
위의 코드 예제에서는 조건문의 두 경우 모두에 종료 함수를 포함했습니다. 프로그램이 종료되기 직전에 printf
기능을 추가했습니다.
프로그램이 이전에 종료되었으므로 이 메시지는 인쇄되지 않습니다.
출력:
결론
C는 예외 처리를 명시적으로 지원하지 않습니다. 그러나 특정 오류 처리 프리미티브(즉, 라이브러리 함수)를 사용하여 C에서 충분한 예외 처리를 달성할 수 있습니다.