차리토 실험실
C언어 예제 #8 (예외 처리)
수차리토
2023. 3. 31. 20:46
C 언어에서 예외 처리를 구현하는 방법은 크게 두 가지입니다.
1. 오류 코드를 반환하는 방법
오류가 발생하면 함수에서는 오류 코드를 반환하여 호출한 측에서 이를 처리하도록 합니다. 이 방법은 오류 코드를 처리하는 함수를 따로 만들어 호출하는 방법과, 호출한 함수에서 직접 처리하는 방법이 있습니다. 예를 들어, fopen() 함수는 파일을 열 때 오류가 발생할 수 있으며, 이때 오류 코드를 반환하여 호출한 측에서 이를 처리합니다.
#include <stdio.h>
int main() {
FILE *fp = fopen("file.txt", "r");
if (fp == NULL) {
printf("Error: Failed to open file.\n");
return 1;
}
// 파일 처리 코드
fclose(fp);
return 0;
}
2. setjmp()와 longjmp() 함수를 사용하는 방법
setjmp() 함수는 호출하는 위치를 저장하고, longjmp() 함수는 저장된 위치로 돌아가서 실행을 계속합니다. 이를 이용하여 예외 처리를 구현할 수 있습니다. 예를 들어, 다음과 같이 doSomething() 함수에서 오류가 발생하면, setjmp() 함수를 호출하여 현재 위치를 저장하고, longjmp() 함수를 호출하여 저장된 위치로 돌아가 처리를 계속합니다.
#include <stdio.h>
#include <setjmp.h>
jmp_buf buf;
void doSomething() {
// 오류 발생
longjmp(buf, 1);
}
int main() {
if (setjmp(buf) == 0) {
// 정상 처리
printf("Hello, World!\n");
doSomething();
} else {
// 오류 처리
printf("Error: Something went wrong.\n");
}
return 0;
}
위 코드에서 doSomething() 함수에서 longjmp() 함수를 호출하면, setjmp() 함수에서 저장한 위치로 돌아가게 됩니다. 이때 setjmp() 함수가 0이 아닌 값을 반환하므로, 이를 이용하여 오류 처리를 수행합니다.
위 두 가지 방법은 각각 오류 코드를 반환하거나, setjmp()와 longjmp() 함수를 사용하여 예외 처리를 구현하는 방법입니다. 이를 이용하여 프로그래머는 C 언어에서도 예외 처리를 구현할 수 있습니다.