assert 라이브러리
디버깅을 할 때 유용하게 사용할 수 있는 assert라이브러리에 대해 설명해주겠다.
사용법은 간단하다. assert.h
를 include하고, 반드시 만족해야 하는 조건을 assert()
로 설정해주면 된다.
예제를 보자, 사용자에게 정수 두개를 입력받고 나눈 값을 출력하는 예제이다. 이때 나누기를 수행하는 divide()
함수에 assert()
를 이용할 수 있다.
int main()
{
int a, b;
int f = scanf("%d%d", &a, &b);
printf("a / b = %d", divide(a,b));
return 0;
}
int divide(int a, int b)
{
assert(b != 0);
/*if (b != 0)
{
printf("cannot divied\\n");
exit(1);
}*/
return a / b;
}
나눗셈의 고려할 요소 중 하나는 0으로 나누기임. 이때 주석처리한 것 처럼 구현할 수도 있지만, assert()
를 이용하면 더 간략하게 구현할 수 있다. 그리고 assert()
를 이용하면 의미전달이 더 뚜렷함.
디버그모드로 진입했을때 assert()가 작동함
이렇게 몇번째 줄의 assert에서 fail이 나왔는지 알려주며 실행이 멈춘다.
릴리즈 모드에서 실행하면 assert()
가 무시된다. 릴리즈 모드는 개발이 다 끝났고 배포를 하기 위한 모드, 즉 디버그가 다 끝났다는 의미로 간주하기 때문에 디버그를 위한 함수들은 빌드시 포함되지 않는다.
디버그시 있어서는 안되는 일에는 assert를 걸어놓는 습관이 좋다. 이를 통해 명백한 잔실수를 줄이면서 디버그의 효율을 늘릴 수 있음.
다음으로 static assert라는게 있다.
이건 컴파일타임에서 잡아주는 assert이다. 즉 컴파일타임시 있을 수 없는 조건들을 런타임 이전에 잡아주는 조건…
비주얼 스튜디오 C에서는 static assert를 사용못하지만, C++에서는 사용가능.. 거기서 배우자.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ