assertion

 프로그램 런타임시에 발생하거나 발생가능한 에러상황을 미리 예견할 수 있다면 얼마나 해피할까요? 이러한 냄새를 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