세 가지 오류 처리 방식 은 각자 장단 점 이 있다.

이것 은 데이터 구조 연습장 의 한 문제 로 인터넷 에 이미 많은 답안 이 있다.나 는 좀 전면적으로 쓸 수 있 기 를 바란다.
세 가지 오류 처리 방식 은:
(1) exit 문 구 를 사용 하여 실행 을 중지 하고 오 류 를 보고 합 니 다 (2) 함수 의 반환 값 차이 로 정확 한 반환 과 오류 반환 (3) 정형 변수의 함수 파 라 메 터 를 설정 하여 정확 한 반환 또는 특정한 오 류 를 구별 합 니 다.
exit 구문 이 실행 을 중지 하고 오 류 를 보고 합 니 다.
exit 는 실제 적 으로 시스템 호출 (system call) 입 니 다.시스템 호출 이란 바로 응용 프로그램 이 운영 체제 간 의 인터페이스 로 많은 기본 적 인 조작 을 밀봉 한 것 이다. 이런 조작 은 빈번하게 사용 되 고 대부분 하드웨어 와 직접 접촉 해 야 한다.다 중 스 레 드 환경 에서 하나의 스 레 드 의 exit 는 이 스 레 드 가 실행 을 중지 한 다음 에 운영 체 제 는 이 스 레 드 에 분 배 된 자원, 예 를 들 어 메모리, 파일 과 출력 장치 등 을 회수 합 니 다.
따라서 실행 을 중지 하 는 것 은 exit 가 있 는 프로 세 스 나 스 레 드 를 중지 하고 프로그램 통제 권 을 운영 체제 에 반환 하 는 것 입 니 다.그렇다면 그것 은 어떻게 잘못 보 고 했 을 까?
exit 문 구 는 실제 적 으로 파 라 메 터 를 휴대 할 수 있 습 니 다. 이것 은 exit status 라 고 하고 형식 은 exit (status) 입 니 다.예 를 들 어 0 은 정상 적 인 탈퇴 를 나타 내 고 0 이 아 닌 이상 탈퇴 를 나타 낸다.짝수 로 정상 적 인 탈퇴 를 표시 하고 홀수 로 비정 상 탈퇴 를 표시 합 니 다.서로 다른 범위 의 정수 로 정상 적 인 종료, 경고, 오류 등 정 보 를 표시 합 니 다.
내 가 사용 한 문장 들:
exit(status); //     ,C  
System.exit(status); // Java
sys.exit(status); // Python
exit // DOS
exit() // Python   

이러한 오류 처리 방식 은 현재 프로 세 스 나 스 레 드 의 종 료 를 직접적 으로 가 져 올 것 이다.프로그램 에 프로 세 스 나 스 레 드 만 있 으 면 프로그램 이 종 료 됩 니 다.발생 한 오류 가 뒤의 문장의 집행 에 심각 한 영향 을 미 치지 않 는 한 모두 상응하는 처 리 를 해 야 한다.이러한 오 류 는 파일 열기 실패, 메모리 할당 실패 등 과 같 습 니 다. 프로그램 을 통 해 스스로 교정 할 수 없 는 오류 입 니 다. 파일 열기 실패 로 인해 대부분의 경우 프로그램의 문제 가 아 닙 니 다. 이 오 류 는 파일 에 대한 읽 기와 쓰기 실 패 를 초래 할 수 있 습 니 다. 프로그램 작성 자 에 게 오 류 를 바로 잡 도록 해 야 합 니 다.메모리 할당 에 실 패 했 습 니 다. 이것 은 저 는 아직 만난 적 이 없습니다. 그러나 메모리 가 프로그램 실행 에 있어 서 매우 중요 합 니 다. 충분 한 메모리 가 없 으 면 데이터 구조의 조작 을 효과적으로 할 수 없습니다. 프로그램 을 종료 하 는 것 외 에는 다른 방법 이 없습니다.
2. 함수 의 반환 값 차이 로 정확 한 반환 과 오류 반환
내 가 사용 한 데이터 구 조 는 이 책 에서 일 부 는 이런 방식 을 채택 했다.
상태 코드 에 대한 정 의 는 다음 과 같 습 니 다.
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int bool;

몇몇 함수, 예 를 들 면:
Status InsIdxList(IdxListType &idxlist, int bno);
Status InOrderTraverse(BiThrTree T, Status(*visit)(TElemType e));

이런 방식 으로 오 류 를 처리 하려 면 반환 값 에 따라 오류 가 발생 하 는 구체 적 인 유형 을 알 수 있다.그러나 광범 위 하 게 이런 방식 으로 함수 의 반환 값 을 처리 하면 함수 의 매개 변수 가 많아 질 수 있다.예 를 들 어 함 수 를 통 해 값 을 되 돌 릴 수 있 으 나 이 를 매개 변수 로 함수 에 전달 하고 C 언어 에 있 는 포인터 에 대해 모 르 는 사이 에 잘못된 확률 을 증가 시 켰 다.따라서 일부 함수 나 방법 을 적당 하 게 선택 하고 그들의 반환 값 을 오류 처리 의 참고 로 하 는 것 이 이성 적 이다.
3. 올 바른 반환 이나 오류 반환 을 구별 하기 위해 전체 변수의 함수 인 자 를 설정 합 니 다.
이런 방식 은 반환 값 으로 정확 한 반환 인지 잘못된 반환 인지 구분 하 는 단점 을 극복 하고 함수 반환 값 이라는 프로그램 이 간결 한 곳 에 남 겨 두 는 것 이 똑똑 한 방법 이다.그리고 정형 변 수 는 그 범위 가 비교적 넓 고 유형 이 많은 오 류 를 효과적으로 반영 할 수 있다 는 것 을 의미한다.단점 은 내 가 만난 적 이 없 으 니까 일단 놔 둬.

좋은 웹페이지 즐겨찾기