프로그래밍/C C++

프로그래밍/assert

우진샘 2010. 3. 5. 11:32

assert()


  • assert(3)의 출력은 정해져 있지 않아 컴파일러마다 조금씩 다름.
  • 일반적으로 assert가 발생된 소스의 파일 이름과 줄 번호를 알려주며 프로그램을 강제로 종료시킴.
  • 프로그램 종료시에는 abort(3)을 사용하도록 되어 있음.
  • assert(3)는 매크로 NDEBUG가 정의되어 있는 경우, ((void)0)으로 확장되어 실제로 기계어 코드를 만들어 내지 않는다.

예제)

#include <assert.h>

int
main(void)
{
int a = -3;
assert(a > 0);
}
gcc -o test test.c
./test
test: test.c:7: main: Assertion `a > 0' failed.


assert()의 적용 기준
 
assert를 사용해야 할지 에러 처리를 해야 할지의 판단 기준.
  1. 외부 입력(소켓, 키보드, 파일)으로부터 저장된 변수는 에러처리.
  2. 1 번이 아닌 설계상 값의 반드시 그 값이 어떠해야한다면
    (NULL이 아니라던지, 0 보다 크거나 같아야한다던지) assert.
  3. enum 값이 넘어다니는 곳은 assert.
  4. if else, if else chain 에서 맨마지막 else 에서 필요한 경우 assert(0)
  5. enum을 switch 로 해결할 때, default 에서 필요한 경우 assert(0)
  6. 리소스(메모리, 파일 디스크립터 등)를 해제할 경우 되도록 assert 로 해제할 리소스가 유효한지 확인.
    확실하게 두번 해제하는 경우는 없도록 함.


참고


ASSERT()

'프로그래밍 > C C++' 카테고리의 다른 글

메모리 영역  (0) 2013.04.20
enum 열거형  (0) 2013.03.22
크리티컬 섹션(Critical Section)  (0) 2013.03.21
% 서식문자 정리  (0) 2013.03.01
프로그래밍/바이트 오더(byte order)  (0) 2011.03.15