프로그램 런타임시에 발생하거나 발생가능한 에러상황을 미리 예견할 수 있다면 얼마나 해피할까요? 이러한 냄새를 100% 맡을 수는 없지만, 적절한 기법을 사용하면 에러 확율을 줄일 수 있습니다.
그 기법에 중에 하나가 assertion입니다.
일반적으로 변수나 포인터에 원치 않는 값이 들어가도 이상없이 실행이 되거나, 혹은 hard fault가 발생됩니다. 이런 상황이 되면 어디에서 에러가 발생한 줄 모르거나 아예 발생한 줄을 모르는 경우가 생길 수도 있습니다.
이럴경우를 대비해서 기본적으로 다음과 같이 코딩을 할 수 있다. 물론 언어나 컴파일 환경에 따른 차이가 존재합니다.
<assert.h>
void main(void) { Register(NULL); } void Register(Handler handler) { assert(handler != NULL); addToRegistry(handler); }
assert 구분이 true가 아니면 개발환경에 따라 에러메시지를 발생시키기도 하고 루프에 빠지기도 합니다. 혹은 asset 함수를 확장해서 만들 수도 있습니다.
예를 들어
assert_ex(false, "do not anything!!!"); void assert_ex(bool param, char *msg) { if(param == false) printf(msg); }
위와 같이 하면 에러 메시지도 본인이 정한 에러메시지를 리포트 받을 수 있습니다.
항상! 프로그램은 에러가 날 수 있으며 우리의 역할은 어떻게 하면 에러 확율을 줄일까 끊임없이 고민을 하는 것입니다.
'▶ 이전글 > C Coding' 카테고리의 다른 글
2차원배열, 함수 매개변수로 넘기는 방법과 파일명 정렬 소스 (0) | 2015.09.15 |
---|---|
불완전 선언(구조체전방선언) (0) | 2014.10.02 |
static (0) | 2014.10.02 |
typedef, define (0) | 2014.10.02 |
enum (0) | 2014.10.02 |