C - 오류 처리

업데이트:

c언어는 exception을 지원하지 않음

버그와 오류의 차이

버그

  • 일어날 수 없다고 가정한 상황
  • 선조건 및 후조건이 성립하지 않고 assert에 실패하는 경우
  • 프로그램이 계속 작동하지 않아야 함
  • 버그가 다시 일어나지 않게 코드를 수정해서 재 컴파일

오류

  • 실행 중 일어날 수 있는 예측 가능한 예외적인 상황들
  • 프로그램이 대처해야 함

오류 처리

  • 버그는 처리했다고 “가정”
    • 내 함수에 들어오는 데이터는 다 유효하다 가정.
  • 유효하지 않은 데이터가 들어오면 “경계”에서 걸러줘야 함

매개변수로 널 포인터를 허용한다면 함수나 변수에 명시하자.

오류 코드를 반환하자!

  • 오류를 처리해주는 함수/코드에서 오류가 있음을 알려줘야 함
  • 함수에서 곧바로 오류 코드를 반환하는 방법이 좋다.

올바른 오류 처리 전략

  1. 기본적으로 내가 작성하는 모든 함수에 들어오는 데이터는 유효하다 가정하고. assert를 많이 쓸 것
  2. 데이터가 유효하지 않음을 허용하는 함수는 매개변수나 함수 이름에서 그렇지 않다는 사실을 명백히 표시할 것
  3. 오류 상황을 처리하는 장소는 최소한으로 할 것
  4. 어떤 함수가 오류 처리를 한다는 사실을 반환형 등을 통해 확실히 보여줄 것

오류 처리를 했음에도 프로그램이 오작동한다면?

  • 버그다.
  • 운영체제에서 이런 문제를 찾아서 SEHSIGNAL을 주기도 함
    • 근데 받아와도 대처가 애매함. 버그를 해결해 프로그램을 정상화하기가 까다로움.

태그: ,

카테고리:

업데이트:

댓글남기기