C - 오류 처리
업데이트:
c언어는 exception을 지원하지 않음
버그와 오류의 차이
버그
- 일어날 수 없다고 가정한 상황
- 선조건 및 후조건이 성립하지 않고 assert에 실패하는 경우
- 프로그램이 계속 작동하지 않아야 함
- 버그가 다시 일어나지 않게 코드를 수정해서 재 컴파일
오류
- 실행 중 일어날 수 있는 예측 가능한 예외적인 상황들
- 프로그램이 대처해야 함
오류 처리
- 버그는 처리했다고 “가정”
- 내 함수에 들어오는 데이터는 다 유효하다 가정.
- 유효하지 않은 데이터가 들어오면 “경계”에서 걸러줘야 함
매개변수로 널 포인터를 허용한다면 함수나 변수에 명시하자.
오류 코드를 반환하자!
- 오류를 처리해주는 함수/코드에서 오류가 있음을 알려줘야 함
- 함수에서 곧바로 오류 코드를 반환하는 방법이 좋다.
올바른 오류 처리 전략
- 기본적으로 내가 작성하는 모든 함수에 들어오는 데이터는 유효하다 가정하고. assert를 많이 쓸 것
- 데이터가 유효하지 않음을 허용하는 함수는 매개변수나 함수 이름에서 그렇지 않다는 사실을 명백히 표시할 것
- 오류 상황을 처리하는 장소는 최소한으로 할 것
- 어떤 함수가 오류 처리를 한다는 사실을 반환형 등을 통해 확실히 보여줄 것
오류 처리를 했음에도 프로그램이 오작동한다면?
- 버그다.
- 운영체제에서 이런 문제를 찾아서
SEH
나SIGNAL
을 주기도 함- 근데 받아와도 대처가 애매함. 버그를 해결해 프로그램을 정상화하기가 까다로움.
댓글남기기